1086 Stimmen

Wie kann ich zwei Listen in Java verbinden?

Bedingungen: keine Änderung der ursprünglichen Listen; nur JDK, keine externen Bibliotheken. Bonuspunkte für einen Einzeiler oder eine JDK 1.3 Version.

Gibt es einen einfacheren Weg als:

List<String> newList = new ArrayList<String>();
newList.addAll(listOne);
newList.addAll(listTwo);

7 Stimmen

Wenn Sie tun dies ausschließlich für Iteration Zwecke siehe eine andere Frage - es gibt Google Guava und Java 8 Lösungen stackoverflow.com/questions/4896662/

0 Stimmen

Java 8-Lösung mit Utility-Methode: stackoverflow.com/a/37386846/1216775

0 Stimmen

Dies ist nur eine der vielen Unzulänglichkeiten der Java Collections API.

40voto

ceklock Punkte 5823

Dies ist einfach und nur eine Zeile, aber es fügt den Inhalt von listTwo zu listOne hinzu. Müssen Sie den Inhalt wirklich in eine dritte Liste aufnehmen?

Collections.addAll(listOne, listTwo.toArray());

15 Stimmen

Die ursprünglichen Listen nicht zu ändern, war eines der Kriterien, aber das hier ist ein nützliches Beispiel für Situationen, in denen das keine Einschränkung ist.

10 Stimmen

Danke, oder noch einfacher listOne.addAll(listTwo)

39voto

Tim Punkte 6681

Ein wenig einfacher:

List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);

0 Stimmen

Würde dies zu doppelten Strings führen? Das heißt, eine Zeichenfolge, die in beiden Listen vorhanden ist, wird in der Ergebnisliste doppelt vorhanden sein?

6 Stimmen

@Zainodis Ja, es kann zu Überschneidungen kommen. Die List Struktur keine Einzigartigkeitsbeschränkungen auferlegt. Sie können Duplikate entfernen, indem Sie das Gleiche mit Mengen tun. Set<String> newSet = new HashSet<>(setOne); newSet.addAll(setTwo);

22voto

Jorn Punkte 17575

Ein wenig kürzer wäre es:

List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);

21voto

Daniel Hári Punkte 6308

Sie können Ihre generische Java 8 Utility-Methode zur Verkettung eine beliebige Anzahl von Listen .

@SafeVarargs
public static <T> List<T> concat(List<T>... lists) {
    return Stream.of(lists).flatMap(List::stream).collect(Collectors.toList());
}

15voto

Nitin Jain Punkte 167

Unter Java 8 (in die andere Richtung):

List<?> newList = 
Stream.of(list1, list2).flatMap(List::stream).collect(Collectors.toList());

0 Stimmen

Dieser Ansatz wird bereits in dieser Antwort vorgeschlagen: stackoverflow.com/a/37386846

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X