Heim >Java >javaLernprogramm >Java Stream.distinct()

Java Stream.distinct()

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-26 15:09:09836Durchsuche

Java Stream.distinct()

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

  1. Für primitive oder einfache Objekte (wie Ganzzahl, String):

distinct() entfernt Duplikate durch direkten Wertevergleich.

Beispiel: [1, 2, 2, 3] wird zu [1, 2, 3].

  1. Für benutzerdefinierte Objekte:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn