2016-05-09 8 views
-1

Angenommen, ich habe den Code:Teilliste von Liste in Java, die keine einzige kontinuierliche Bereich ist

List<String> list = new ArrayList<String>(); 
list.add("A"); //want 
list.add("B"); 
list.add("C"); 
list.add("D"); //want 
list.add("E"); //want 

und ich möchte eine neue Liste erstellen, die nur die Elemente hat „A“, „D „E“.

Die List-Klasse verfügt über eine Methode subList, die nur, wenn Sie ein Einzel kontinuierlichen Bereich haben funktioniert, aber was, wenn Sie mehrere Bereiche oder mehrere diskrete Elemente wollen?

gibt es eine Methode in Java oder eine Bibliothek, die mir erlaubt, etwas zu tun wie:

List<String> subList = NeatListUtilities.subList(list, 0, 3, 4); 
+1

Es wäre einfach zu implementieren. Ich habe mich nur gefragt, ob Java es hatte oder ob es eine häufig benutzte Bibliothek hatte. – user64141

+0

Ein gültiger Punkt, aber bedenken Sie, dass Apache Commons viele Funktionen bietet, die sich einfach implementieren lassen. Aber wenn wir eine Menge dieser "kleinen" Funktionen haben, die wir selbst implementieren, beginnt es zu Schneeball. Die Bibliothek, die ich anfordere, scheint etwas zu sein, das häufig verwendet wird. – user64141

Antwort

2

Keine, die ich kenne, aber es ist ziemlich einfach zu implementieren.

(Kein Fehler/Bereichsprüfung, angenommen Verwendung von Arraylist)

public static <T> List<T> subList(List<T> src, int... indices) { 
    List<T> result = new ArrayList<>(indices.length); 
    for(int i : indices) { 
     result.add(src.get(i)); 
    } 
    return result; 
} 
1

Eine prägnante Art und Weise zu tun, was Sie mit Stream wollen:

List<String> subList = IntStream.of(0, 3, 4) 
    .mapToObj(i -> list.get(i)) 
    .collect(Collectors.toList()); 

Also, wahrscheinlich ein Sie nicht brauchen Bibliothek dafür.

+1

Kann 'i -> list.get (i)' auch durch 'list :: get 'ersetzen, wenn Sie, wie ich, Methodenverweise sauberer finden. –