La méthode Stream.distinct() en Java est utilisée pour filtrer les éléments en double d'un flux, garantissant que le flux résultant ne contient que des éléments uniques. Cela fonctionne sur la base de la méthode equals() des objets du flux.
Cette méthode fait partie de l'API Java Stream introduite dans Java 8 et est couramment utilisée pour gérer des collections ou des tableaux avec des valeurs en double.
Exemple 1 : Supprimer les doublons d'une liste de chaînes
Imaginez que vous avez une liste de noms et que certains noms sont répétés. Vous voulez une liste de noms uniques.
import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // List of names with duplicates List<String> names = List.of("Alice", "Bob", "Alice", "Charlie", "Bob", "David"); // Use Stream.distinct() to remove duplicates List<String> uniqueNames = names.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueNames); // Output: [Alice, Bob, Charlie, David] } }
Comment ça marche :
La méthode distinct() compare chaque nom et ne conserve que la première occurrence d'un doublon.
Exemple 2 : Supprimer les doublons d'une liste de numéros
Prenons une liste de numéros où des doublons existent et extrayons uniquement les numéros uniques.
import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // List of numbers with duplicates List<Integer> numbers = List.of(1, 2, 3, 2, 4, 3, 5); // Use Stream.distinct() to remove duplicates List<Integer> uniqueNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueNumbers); // Output: [1, 2, 3, 4, 5] } }
Comment ça marche :
Les nombres sont comparés en utilisant leur égalité naturelle (basée sur equals() pour Integer), donc les doublons sont filtrés.
Exemple 3 : Travailler avec des objets simples
Créons une classe Product et supprimons les doublons en fonction de l'identifiant du produit.
Code :
import java.util.List; import java.util.Objects; import java.util.stream.Collectors; class Product { private int id; private String name; public Product(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Product product = (Product) o; return id == product.id; } @Override public int hashCode() { return Objects.hash(id); } @Override public String toString() { return "Product{id=" + id + ", name='" + name + "'}"; } } public class Main { public static void main(String[] args) { // List of products with duplicates (based on id) List<Product> products = List.of( new Product(1, "Laptop"), new Product(2, "Tablet"), new Product(1, "Laptop"), // Duplicate new Product(3, "Smartphone"), new Product(2, "Tablet") // Duplicate ); // Use Stream.distinct() to remove duplicates List<Product> uniqueProducts = products.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueProducts); // Output: // [Product{id=1, name='Laptop'}, Product{id=2, name='Tablet'}, Product{id=3, name='Smartphone'}] } }
Explication :
Contrôle d'égalité : la méthode equals() est remplacée pour garantir que les objets Product sont considérés comme égaux en fonction de leur identifiant.
Suppression des doublons : lorsque distinct() rencontre deux produits avec le même identifiant, il ne conserve que le premier.
Sortie : vous obtenez une liste de produits uniques.
Compréhension simplifiée
distinct() supprime les doublons en comparant directement les valeurs.
Exemple : [1, 2, 2, 3] devient [1, 2, 3].
Vous devez implémenter les méthodes equals() et hashCode() pour la classe.
distinct() utilise ces méthodes pour déterminer si deux objets sont des doublons.
Cas d'utilisation : Filtrage des noms en double à partir des entrées utilisateur
Imaginez qu'un utilisateur saisisse des noms à plusieurs reprises dans un formulaire et que vous souhaitiez vous assurer que seuls les noms uniques sont stockés.
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // Simulate user input List<String> userInput = new ArrayList<>(); userInput.add("John"); userInput.add("Mary"); userInput.add("John"); // Duplicate userInput.add("Alice"); // Remove duplicates List<String> uniqueInput = userInput.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueInput); // Output: [John, Mary, Alice] } }
Cela garantit que l'application ne stocke que des noms uniques sans nécessiter de vérification manuelle des doublons.
Dernier point à retenir :
distinct() est simple : il supprime les doublons d'un flux.
Pour les types primitifs ou immuables : utilisez-le simplement directement.
Pour les objets personnalisés : assurez-vous que les implémentations d'equals() et de hashCode() sont appropriées.
Conseil pratique : utilisez-le pour nettoyer les données en double sous n'importe quelle forme (par exemple, listes, entrées utilisateur, résultats de base de données).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!