Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Duplicaten Verwijderen Met de distinct()-Methode | Intermediaire Bewerkingen in Stream API
Stream-API

bookDuplicaten Verwijderen Met de distinct()-Methode

In de praktijk van softwareontwikkeling kom je vaak situaties tegen waarin gegevens duplicaten bevatten die verwijderd moeten worden. Stel je bijvoorbeeld voor dat je een lijst van conferentiebezoekers samenstelt, maar door systeemfouten zijn sommige namen dubbel geregistreerd.

De methode distinct() lost dit probleem op door dubbele elementen uit een stream te verwijderen.

Stream<T> distinct()

Deze methode retourneert een stream met alleen unieke elementen, waarbij alle duplicaten worden gefilterd.

Werking

De distinct()-methode maakt gebruik van hashCode() om snel mogelijke duplicaten te detecteren en van equals() om te bevestigen of ze daadwerkelijk identiek zijn. Als twee objecten verschillende hashcodes hebben, worden ze als uniek beschouwd. Als de hashcodes overeenkomen, wordt equals() aangeroepen om hun gelijkheid te verifiëren op basis van specifieke criteria.

Samen vormen deze methoden het hashCode() en equals() contract, wat zorgt voor correcte vergelijking en verwijdering van duplicaten.

In plaats van deze handmatig te schrijven, biedt IntelliJ IDEA de mogelijkheid om ze automatisch te genereren.

In IntelliJ IDEA is het codegeneratie-menu geopend (Alt + Insert op Windows/Linux, Cmd + N op Mac) en zijn equals() en hashCode() geselecteerd. Na het kiezen van de velden die in de vergelijking moeten worden opgenomen, genereert IDEA automatisch de benodigde methoden.

Praktisch Voorbeeld

Een fabriek houdt de geproduceerde onderdelen bij, maar het rapport bevat duplicaten en defecte onderdelen met het label DEFECT. Het doel is om de lijst te opschonen, zodat alleen unieke, niet-defecte onderdelen overblijven, deze te sorteren op naam en weer te geven in het formaat: Name - Serial Number.

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; } }

Om duplicaten te verwijderen en defecte onderdelen te filteren, moeten de methoden equals() en hashCode() correct worden geïmplementeerd om onderdelen te vergelijken op serienummer.

Daarna wordt distinct() gebruikt om duplicaten te elimineren, filter() om defecte onderdelen met DEFECT in de naam te verwijderen, sorted() om de resterende onderdelen te ordenen en map() om ze als strings te formatteren.

1. Wat wordt gebruikt om elementen te vergelijken in de distinct()-methode?

2. Als twee objecten dezelfde hashCode() hebben, maar hun equals()-methode geeft false terug, worden ze dan als hetzelfde beschouwd in de distinct()-methode?

question mark

Wat wordt gebruikt om elementen te vergelijken in de distinct()-methode?

Select the correct answer

question mark

Als twee objecten dezelfde hashCode() hebben, maar hun equals()-methode geeft false terug, worden ze dan als hetzelfde beschouwd in de distinct()-methode?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 2.33

bookDuplicaten Verwijderen Met de distinct()-Methode

Veeg om het menu te tonen

In de praktijk van softwareontwikkeling kom je vaak situaties tegen waarin gegevens duplicaten bevatten die verwijderd moeten worden. Stel je bijvoorbeeld voor dat je een lijst van conferentiebezoekers samenstelt, maar door systeemfouten zijn sommige namen dubbel geregistreerd.

De methode distinct() lost dit probleem op door dubbele elementen uit een stream te verwijderen.

Stream<T> distinct()

Deze methode retourneert een stream met alleen unieke elementen, waarbij alle duplicaten worden gefilterd.

Werking

De distinct()-methode maakt gebruik van hashCode() om snel mogelijke duplicaten te detecteren en van equals() om te bevestigen of ze daadwerkelijk identiek zijn. Als twee objecten verschillende hashcodes hebben, worden ze als uniek beschouwd. Als de hashcodes overeenkomen, wordt equals() aangeroepen om hun gelijkheid te verifiëren op basis van specifieke criteria.

Samen vormen deze methoden het hashCode() en equals() contract, wat zorgt voor correcte vergelijking en verwijdering van duplicaten.

In plaats van deze handmatig te schrijven, biedt IntelliJ IDEA de mogelijkheid om ze automatisch te genereren.

In IntelliJ IDEA is het codegeneratie-menu geopend (Alt + Insert op Windows/Linux, Cmd + N op Mac) en zijn equals() en hashCode() geselecteerd. Na het kiezen van de velden die in de vergelijking moeten worden opgenomen, genereert IDEA automatisch de benodigde methoden.

Praktisch Voorbeeld

Een fabriek houdt de geproduceerde onderdelen bij, maar het rapport bevat duplicaten en defecte onderdelen met het label DEFECT. Het doel is om de lijst te opschonen, zodat alleen unieke, niet-defecte onderdelen overblijven, deze te sorteren op naam en weer te geven in het formaat: Name - Serial Number.

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; } }

Om duplicaten te verwijderen en defecte onderdelen te filteren, moeten de methoden equals() en hashCode() correct worden geïmplementeerd om onderdelen te vergelijken op serienummer.

Daarna wordt distinct() gebruikt om duplicaten te elimineren, filter() om defecte onderdelen met DEFECT in de naam te verwijderen, sorted() om de resterende onderdelen te ordenen en map() om ze als strings te formatteren.

1. Wat wordt gebruikt om elementen te vergelijken in de distinct()-methode?

2. Als twee objecten dezelfde hashCode() hebben, maar hun equals()-methode geeft false terug, worden ze dan als hetzelfde beschouwd in de distinct()-methode?

question mark

Wat wordt gebruikt om elementen te vergelijken in de distinct()-methode?

Select the correct answer

question mark

Als twee objecten dezelfde hashCode() hebben, maar hun equals()-methode geeft false terug, worden ze dan als hetzelfde beschouwd in de distinct()-methode?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 7
some-alt