Die Stream.distinct()-Methode in Java wird verwendet, um doppelte Elemente aus einem Stream herauszufiltern und sicherzustellen, dass der resultierende Stream nur eindeutige Elemente enthält. Es funktioniert basierend auf der Methode equal() der Objekte im Stream.
Diese Methode ist Teil der in Java 8 eingeführten Java Stream API und wird häufig verwendet, um Sammlungen oder Arrays mit doppelten Werten zu verarbeiten.
Beispiel 1: Duplikate aus einer Liste von Zeichenfolgen entfernen
Stellen Sie sich vor, Sie haben eine Liste mit Namen und einige Namen wiederholen sich. Sie möchten eine Liste eindeutiger Namen.
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] } }
Wie es funktioniert:
Die Methode „distinct()“ vergleicht jeden Namen und behält nur das erste Vorkommen eines Duplikats.
Beispiel 2: Duplikate aus einer Nummernliste entfernen
Nehmen wir eine Liste von Zahlen, in denen Duplikate existieren, und extrahieren wir nur die eindeutigen Zahlen.
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] } }
Wie es funktioniert:
Die Zahlen werden anhand ihrer natürlichen Gleichheit verglichen (basierend auf equal() für Integer), sodass Duplikate herausgefiltert werden.
Beispiel 3: Arbeiten mit einfachen Objekten
Lassen Sie uns eine Klasse „Produkt“ erstellen und Duplikate basierend auf der Produkt-ID entfernen.
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'}] } }
Erklärung:
Gleichheitsprüfung: Die Methode equal() wird überschrieben, um sicherzustellen, dass Produktobjekte basierend auf ihrer ID als gleich betrachtet werden.
Duplikatentfernung: Wenn simply() auf zwei Produkte mit derselben ID trifft, behält es nur das erste bei.
Ausgabe: Sie erhalten eine Liste einzigartiger Produkte.
Vereinfachtes Verständnis
distinct() entfernt Duplikate durch direkten Wertevergleich.
Beispiel: [1, 2, 2, 3] wird zu [1, 2, 3].
Sie müssen die Methoden equal() und hashCode() für die Klasse implementieren.
distinct() verwendet diese Methoden, um zu bestimmen, ob zwei Objekte Duplikate sind.
Anwendungsfall: Filtern doppelter Namen aus Benutzereingaben
Stellen Sie sich vor, ein Benutzer gibt wiederholt Namen in ein Formular ein und Sie möchten sicherstellen, dass nur eindeutige Namen gespeichert werden.
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] } }
Dadurch wird sichergestellt, dass die Anwendung nur eindeutige Namen speichert, ohne dass manuelle Überprüfungen auf Duplikate erforderlich sind.
Letzter Imbiss:
distinct() ist einfach: Es entfernt Duplikate aus einem Stream.
Für Primitive oder unveränderliche Typen: Verwenden Sie es einfach direkt.
Für benutzerdefinierte Objekte: Stellen Sie sicher, dass die Implementierungen equal() und hashCode() korrekt sind.
Praxistipp: Bereinigen Sie damit doppelte Daten in jeglicher Form (z. B. Listen, Benutzereingaben, Datenbankergebnisse).
Das obige ist der detaillierte Inhalt vonJava Stream.distinct(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!