625 Stimmen

Set in Liste umwandeln ohne neue Liste zu erstellen

Ich verwende diesen Code zur Konvertierung einer Set a un List :

Map<String, List<String>> mainMap = new HashMap<>();

for (int i=0; i < something.size(); i++) {
  Set<String> set = getSet(...); //returns different result each time
  List<String> listOfNames = new ArrayList<>(set);
  mainMap.put(differentKeyName, listOfNames);
}

Ich möchte vermeiden, dass bei jeder Iteration der Schleife eine neue Liste erstellt wird. Ist das möglich?

920voto

amit Punkte 172586

Sie können die List.addAll() Methode. Sie akzeptiert eine Sammlung als Argument, und Ihre Menge ist eine Sammlung.

List<String> mainList = new ArrayList<String>();
mainList.addAll(set);

EDIT: als Antwort auf die Bearbeitung der Frage.
Es ist leicht einzusehen, dass man, wenn man eine Map con List s als Werte zu verwenden, müssen Sie k verschiedene Listen erstellen, um k verschiedene Werte zu erhalten.
Deshalb: Sie kommen um die Erstellung dieser Listen gar nicht herum, die Listen müssen erstellt werden.

Mögliche Abhilfe:
Erklären Sie Ihre Map als Map<String,Set> o Map<String,Collection> und fügen Sie einfach Ihr Set ein.

508voto

zengsn Punkte 4839

Verwenden Sie den Konstruktor, um es zu konvertieren:

List<?> list = new ArrayList<>(set);

94voto

chaiyachaiya Punkte 2467

Auch aus der Guava Collect Bibliothek können Sie newArrayList(Collection) :

Lists.newArrayList([your_set])

Dies wäre sehr ähnlich wie die vorherige Antwort von amit mit der Ausnahme, dass Sie keine Deklaration (oder Instanziierung) von list objeto.

57voto

rajadilipkolli Punkte 3319

Wir können folgenden One-Liner in Java 8 verwenden:

List<String> list = set.stream().collect(Collectors.toList());

Hier ist ein kleines Beispiel:

public static void main(String[] args) {
        Set<String> set = new TreeSet<>();
        set.add("A");
        set.add("B");
        set.add("C");
        List<String> list = set.stream().collect(Collectors.toList());
}

45voto

Basheer AL-MOMANI Punkte 13273

die einfachste Lösung

Ich wollte einen sehr schnellen Weg, um meine Menge in eine Liste zu konvertieren und sie zurückzugeben, also habe ich in einer Zeile

 return new ArrayList<Long>(mySetVariable);

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