Schnittpunkt zweier Listen in Java

1. Übersicht

In diesem Tutorial erfahren Sie, wie Sie den Schnittpunkt zweier Listen abrufen .

Wie viele andere Dinge ist dies dank der Einführung von Streams in Java 8 viel einfacher geworden.

2. Schnittpunkt zweier Saitenlisten

Erstellen wir zwei Listen mit Zeichenfolgen mit einem Schnittpunkt - beide mit doppelten Elementen:

List list = Arrays.asList("red", "blue", "blue", "green", "red"); List otherList = Arrays.asList("red", "green", "green", "yellow");

Und jetzt bestimmen wir den Schnittpunkt der Listen mithilfe von Stream-Methoden :

Set result = list.stream() .distinct() .filter(otherList::contains) .collect(Collectors.toSet()); Set commonElements = new HashSet(Arrays.asList("red", "green")); Assert.assertEquals(commonElements, result);

Zuerst entfernen wir die duplizierten Elemente mit eindeutigen . Dann verwenden wir den Filter , um die Elemente auszuwählen, die auch in der otherList enthalten sind .

Schließlich konvertieren wir unsere Ausgabe mit einem Collector . Der Schnittpunkt sollte jedes gemeinsame Element nur einmal enthalten. Die Reihenfolge sollte keine Rolle spielen, daher ist toSet die einfachste Wahl, aber wir können auch toList oder eine andere Collector-Methode verwenden.

Weitere Informationen finden Sie in unserem Handbuch zu den Collectors von Java 8.

3. Schnittmenge von Listen benutzerdefinierter Klassen

Was passiert , wenn unsere Liste s enthalten keine String s , sondern Instanzen einer benutzerdefinierten Klasse die wir erstellt haben? Solange wir die Konventionen von Java befolgen, funktioniert die Lösung mit Stream-Methoden für unsere benutzerdefinierte Klasse einwandfrei.

Wie funktioniert das enthält Verfahren entscheiden , ob ein bestimmtes Objekt in einer Liste angezeigt wird ? Basierend auf der Equals- Methode. Daher müssen wir die Methode equals überschreiben und sicherstellen, dass zwei Objekte basierend auf den Werten der relevanten Eigenschaften verglichen werden.

Beispielsweise sind zwei Rechtecke gleich, wenn ihre Breiten und Höhen gleich sind.

Wenn wir die Methode equals nicht überschreiben , verwendet unsere Klasse die Implementierung equals der übergeordneten Klasse. Am Ende des Tages bzw. der Vererbungskette wird die Methode equals der Object- Klasse ausgeführt. Dann sind zwei Instanzen nur dann gleich, wenn sie sich auf genau dasselbe Objekt auf dem Heap beziehen.

Weitere Informationen zur Methode equals finden Sie in unserem Artikel zu Java- Verträgen equals () und hashCode () .

4. Fazit

In diesem kurzen Artikel haben wir gesehen, wie Streams verwendet werden, um den Schnittpunkt zweier Listen zu berechnen. Es gibt viele andere Vorgänge, die früher ziemlich langwierig waren, aber ziemlich einfach sind, wenn wir uns mit der Java Stream-API auskennen. Schauen Sie sich hier unsere weiteren Tutorials mit Java-Streams an.

Codebeispiele sind auf GitHub verfügbar.