Einleitung: Warum Listen in Java zusammenführen und wie man nicht durcheinanderkommt
Stellen Sie sich vor: Sie haben zwei Aufgabenlisten – „dringend“ und „wichtig“. Oder zwei Kundenlisten – aus der Datenbank des letzten Monats und des aktuellen Monats. Um mit ihnen als einer Einheit zu arbeiten, müssen Sie sie zusammenführen. In Java tritt diese Aufgabe so häufig auf, dass die Frage „How do I join two lists in Java?“ auf Stack Overflow tausende Aufrufe sammelt. Und das ist kein Zufall: Bei Anfängern sorgt das Zusammenführen von Listen oft für Verwirrung – mal ein Kompilierungsfehler, mal erweist sich die Liste als unveränderlich, mal gehen Daten verloren.
In diesem Artikel behandeln wir 5 bewährte Methoden, um zwei Listen in Java zusammenzuführen – vom klassischen addAll bis zum eleganten Stream API. Sie erfahren, welche Methode Sie für verschiedene Situationen wählen, wie Sie Fallstricke vermeiden und Code schreiben, der schnell und vorhersagbar funktioniert. Los geht's!
Methode 1: Klassisches addAll – einfach und zuverlässig
Der direkteste Weg ist die Verwendung der Methode addAll() aus dem Interface Collection. Sie fügt alle Elemente einer Sammlung zu einer anderen hinzu. Klingt ideal, aber es gibt einen Haken: Sie verändert die ursprüngliche Liste. Wenn Sie die ursprünglichen Listen unverändert lassen müssen – erstellen Sie eine neue.
Beispiel: Zusammenführen unter Beibehaltung der Originale
import java.util.ArrayList;import java.util.List;
public class JoinListsExample { public static void main(String[] args) { List<String> listA = new ArrayList<>(List.of("Java", "Python", "C++")); List<String> listB = new ArrayList<>(List.of("JavaScript", "Go", "Rust"));
// Neue Liste erstellen und beide Listen hinzufügen List<String> mergedList = new ArrayList<>(listA); mergedList.addAll(listB);
System.out.println(mergedList); // [Java, Python, C++, JavaScript, Go, Rust] // Die ursprünglichen Listen wurden nicht verändert }}Vorteile: intuitiv verständlich, funktioniert mit allen List-Typen, benötigt kein Java 8+.
Nachteile: verändert die ursprüngliche Liste, wenn keine neue erstellt wird; unterstützt keine lazy evaluation.
Methode 2: Stream API – modern und flexibel
Wenn Sie Java 8 oder neuer verwenden, bietet das Stream API eine elegante Möglichkeit, Listen zusammenzuführen. Es verändert die ursprünglichen Daten nicht und lässt sich leicht mit anderen Operationen kombinieren – Filtern, Sortieren, Transformieren.
Basis-Zusammenführung mit Stream.concat
import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;
public class StreamJoinExample { public static void main(String[] args) { List<String> listA = List.of("Rot", "Grün", "Blau"); List<String> listB = List.of("Gelb", "Violett");
List<String> mergedList = Stream.concat(listA.stream(), listB.stream()) .collect(Collectors.toList());
System.out.println(mergedList); // [Rot, Grün, Blau, Gelb, Violett] }}Zusammenführen mit Filtern und Sortieren
Angenommen, Sie müssen zwei Zahlenlisten zusammenführen, nur die geraden Zahlen behalten und absteigend sortieren:
import java.util.List;import java.util.Comparator;import java.util.stream.Collectors;import java.util.stream.Stream;
public class StreamAdvancedJoin { public static void main(String[] args) { List<Integer> listA = List.of(5, 2, 8, 1); List<Integer> listB = List.of(7, 4, 9, 3);
List<Integer> result = Stream.concat(listA.stream(), listB.stream()) .filter(n -> n % 2 == 0) // nur gerade .sorted(Comparator.reverseOrder()) .collect(C