Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Duplikate mit der distinct()-Methode Entfernen | Intermediate-Operationen im Stream-API
Stream-API

bookDuplikate mit der distinct()-Methode Entfernen

In der realen Softwareentwicklung treten häufig Situationen auf, in denen Daten Duplikate enthalten, die entfernt werden müssen. Stellen Sie sich beispielsweise vor, Sie erstellen eine Liste von Konferenzteilnehmern, aber aufgrund von Systemfehlern wurden einige Namen doppelt erfasst.

Die Methode distinct() löst dieses Problem, indem sie doppelte Elemente aus einem Stream entfernt.

Stream<T> distinct()

Diese Methode gibt einen Stream zurück, der nur einzigartige Elemente enthält und alle Duplikate herausfiltert.

Funktionsweise

Die Methode distinct() verwendet hashCode(), um potenzielle Duplikate schnell zu erkennen, und equals(), um zu bestätigen, ob sie tatsächlich identisch sind. Haben zwei Objekte unterschiedliche Hashcodes, gelten sie als einzigartig. Stimmen die Hashcodes überein, wird equals() aufgerufen, um deren Gleichheit anhand spezifischer Kriterien zu überprüfen.

Zusammen bilden diese Methoden den hashCode()- und equals() Vertrag, der eine korrekte Vergleichbarkeit und Duplikaterkennung gewährleistet.

Anstatt sie manuell zu schreiben, ermöglicht IntelliJ IDEA das automatische Generieren dieser Methoden.

In IntelliJ IDEA wurde das Menü zur Codegenerierung geöffnet (Alt + Insert unter Windows/Linux, Cmd + N unter Mac) und equals() sowie hashCode() ausgewählt. Nach Auswahl der Felder für den Vergleich hat IDEA die erforderlichen Methoden automatisch generiert.

Praktisches Beispiel

Eine Fabrik verfolgt produzierte Teile, aber der Bericht enthält Duplikate sowie defekte Teile, die mit DEFECT gekennzeichnet sind. Ziel ist es, die Liste zu bereinigen, sodass nur eindeutige, nicht defekte Teile erhalten bleiben, diese nach Name sortiert und im Format Name - Serial Number angezeigt werden.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
package com.example; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Part> parts = List.of( new Part("SN001", "Gear"), new Part("SN002", "Bolt"), new Part("SN003", "Nut"), new Part("SN001", "Gear"), new Part("SN004", "DEFECT Shaft"), new Part("SN005", "Screw"), new Part("SN002", "Bolt"), new Part("SN006", "DEFECT Washer") ); List<String> processedParts = parts.stream() .distinct() .filter(part -> !part.getName().contains("DEFECT")) .sorted((p1, p2) -> p1.getName().compareToIgnoreCase(p2.getName())) .map(part -> part.getName() + " - " + part.getSerialNumber()) .toList(); System.out.println(processedParts); } } class Part { private String serialNumber; private String name; public Part(String serialNumber, String name) { this.serialNumber = serialNumber; this.name = name; } public String getSerialNumber() { return serialNumber; } public String getName() { return name; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Part)) return false; Part part = (Part) o; return serialNumber.equals(part.serialNumber); } @Override public int hashCode() { return serialNumber.hashCode(); } @Override public String toString() { return name + " - " + serialNumber; } }

Um Duplikate zu entfernen und defekte Teile herauszufiltern, müssen die Methoden equals() und hashCode() korrekt implementiert werden, sodass Teile anhand der Seriennummer verglichen werden.

Anschließend wird distinct() verwendet, um Duplikate zu eliminieren, filter(), um defekte Teile mit DEFECT im Namen zu entfernen, sorted(), um die verbleibenden Teile zu sortieren, und map(), um sie als Strings zu formatieren.

1. Was wird verwendet, um Elemente in der Methode distinct() zu vergleichen?

2. Wenn zwei Objekte denselben hashCode() haben, aber ihre Methode equals() false zurückgibt, werden sie in der Methode distinct() als gleich betrachtet?

question mark

Was wird verwendet, um Elemente in der Methode distinct() zu vergleichen?

Select the correct answer

question mark

Wenn zwei Objekte denselben hashCode() haben, aber ihre Methode equals() false zurückgibt, werden sie in der Methode distinct() als gleich betrachtet?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 7

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 2.33

bookDuplikate mit der distinct()-Methode Entfernen

Swipe um das Menü anzuzeigen

In der realen Softwareentwicklung treten häufig Situationen auf, in denen Daten Duplikate enthalten, die entfernt werden müssen. Stellen Sie sich beispielsweise vor, Sie erstellen eine Liste von Konferenzteilnehmern, aber aufgrund von Systemfehlern wurden einige Namen doppelt erfasst.

Die Methode distinct() löst dieses Problem, indem sie doppelte Elemente aus einem Stream entfernt.

Stream<T> distinct()

Diese Methode gibt einen Stream zurück, der nur einzigartige Elemente enthält und alle Duplikate herausfiltert.

Funktionsweise

Die Methode distinct() verwendet hashCode(), um potenzielle Duplikate schnell zu erkennen, und equals(), um zu bestätigen, ob sie tatsächlich identisch sind. Haben zwei Objekte unterschiedliche Hashcodes, gelten sie als einzigartig. Stimmen die Hashcodes überein, wird equals() aufgerufen, um deren Gleichheit anhand spezifischer Kriterien zu überprüfen.

Zusammen bilden diese Methoden den hashCode()- und equals() Vertrag, der eine korrekte Vergleichbarkeit und Duplikaterkennung gewährleistet.

Anstatt sie manuell zu schreiben, ermöglicht IntelliJ IDEA das automatische Generieren dieser Methoden.

In IntelliJ IDEA wurde das Menü zur Codegenerierung geöffnet (Alt + Insert unter Windows/Linux, Cmd + N unter Mac) und equals() sowie hashCode() ausgewählt. Nach Auswahl der Felder für den Vergleich hat IDEA die erforderlichen Methoden automatisch generiert.

Praktisches Beispiel

Eine Fabrik verfolgt produzierte Teile, aber der Bericht enthält Duplikate sowie defekte Teile, die mit DEFECT gekennzeichnet sind. Ziel ist es, die Liste zu bereinigen, sodass nur eindeutige, nicht defekte Teile erhalten bleiben, diese nach Name sortiert und im Format Name - Serial Number angezeigt werden.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
package com.example; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Part> parts = List.of( new Part("SN001", "Gear"), new Part("SN002", "Bolt"), new Part("SN003", "Nut"), new Part("SN001", "Gear"), new Part("SN004", "DEFECT Shaft"), new Part("SN005", "Screw"), new Part("SN002", "Bolt"), new Part("SN006", "DEFECT Washer") ); List<String> processedParts = parts.stream() .distinct() .filter(part -> !part.getName().contains("DEFECT")) .sorted((p1, p2) -> p1.getName().compareToIgnoreCase(p2.getName())) .map(part -> part.getName() + " - " + part.getSerialNumber()) .toList(); System.out.println(processedParts); } } class Part { private String serialNumber; private String name; public Part(String serialNumber, String name) { this.serialNumber = serialNumber; this.name = name; } public String getSerialNumber() { return serialNumber; } public String getName() { return name; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Part)) return false; Part part = (Part) o; return serialNumber.equals(part.serialNumber); } @Override public int hashCode() { return serialNumber.hashCode(); } @Override public String toString() { return name + " - " + serialNumber; } }

Um Duplikate zu entfernen und defekte Teile herauszufiltern, müssen die Methoden equals() und hashCode() korrekt implementiert werden, sodass Teile anhand der Seriennummer verglichen werden.

Anschließend wird distinct() verwendet, um Duplikate zu eliminieren, filter(), um defekte Teile mit DEFECT im Namen zu entfernen, sorted(), um die verbleibenden Teile zu sortieren, und map(), um sie als Strings zu formatieren.

1. Was wird verwendet, um Elemente in der Methode distinct() zu vergleichen?

2. Wenn zwei Objekte denselben hashCode() haben, aber ihre Methode equals() false zurückgibt, werden sie in der Methode distinct() als gleich betrachtet?

question mark

Was wird verwendet, um Elemente in der Methode distinct() zu vergleichen?

Select the correct answer

question mark

Wenn zwei Objekte denselben hashCode() haben, aber ihre Methode equals() false zurückgibt, werden sie in der Methode distinct() als gleich betrachtet?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 7
some-alt