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.

7voto

Dave Cheney Punkte 5365

Man könnte es mit einem statischen Import und einer Hilfsklasse machen

nb die Generierung dieser Klasse könnte wahrscheinlich verbessert werden

public class Lists {

   private Lists() { } // can't be instantiated

   public static List<T> join(List<T>... lists) {
      List<T> result = new ArrayList<T>();
      for(List<T> list : lists) {
         result.addAll(list);
      }
      return results;
   }

}

Dann können Sie Dinge tun wie

import static Lists.join;
List<T> result = join(list1, list2, list3, list4);

0 Stimmen

Was hat es mit dem statischen Import oder der Hilfsklasse auf sich?

0 Stimmen

Ich denke, die Signatur der Methode wird wie folgt lauten: "public static <T> List<T> join". Und 'return result'

6voto

cslysy Punkte 801

Java 8 Version mit Unterstützung für das Verbinden nach Objektschlüssel:

public List<SomeClass> mergeLists(final List<SomeClass> left, final List<SomeClass> right, String primaryKey) {
    final Map<Object, SomeClass> mergedList = new LinkedHashMap<>();

    Stream.concat(left.stream(), right.stream())
        .map(someObject -> new Pair<Object, SomeClass>(someObject.getSomeKey(), someObject))
        .forEach(pair-> mergedList.put(pair.getKey(), pair.getValue()));

    return new ArrayList<>(mergedList.values());
}

4voto

lqbweb Punkte 1584

Meine bevorzugte Methode ist die Verwendung von Fluent Api und Guava:

List<String> combined = ImmutableList.<String>builder().addAll(list1).addAll(list2).build()

4voto

Langusten Gustel Punkte 10709
public static <T> List<T> merge(@Nonnull final List<T>... list) {
    // calculate length first
    int mergedLength = 0;
    for (List<T> ts : list) {
      mergedLength += ts.size();
    }

    final List<T> mergedList = new ArrayList<>(mergedLength);

    for (List<T> ts : list) {
      mergedList.addAll(ts);
    }

    return mergedList;
  }

4voto

martyglaubitz Punkte 952
public static <T> List<T> merge(List<T>... args) {
    final List<T> result = new ArrayList<>();

    for (List<T> list : args) {
        result.addAll(list);
    }

    return result;
}

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