348 Stimmen

Wie konvertiert man eine Sammlung in eine Liste?

Ich verwende TreeBidiMap von der Apache-Sammlungen Bibliothek. Ich möchte diese nach den Werten sortieren, die doubles .

Meine Methode ist das Abrufen einer Collection der Werte verwenden:

Collection coll = themap.values();

Das funktioniert natürlich gut.

Hauptfrage: Ich möchte nun wissen, wie ich konvertieren/casten kann (nicht sicher, was richtig ist) coll in eine List damit sie sortiert werden kann?

Ich beabsichtige dann, über die sortierten Daten zu iterieren List Objekt, das in Ordnung sein sollte, und holen Sie die entsprechenden Schlüssel aus dem TreeBidiMap ( themap ) mit themap.getKey(iterator.next()) wobei der Iterator über die Liste der doubles .

523voto

Paul Tomblin Punkte 172816
List list = new ArrayList(coll);
Collections.sort(list);

Wie Erel Segal Halevi weiter unten sagt, können Sie den ersten Schritt überspringen, wenn coll bereits eine Liste ist. Aber das würde von den Interna von TreeBidiMap abhängen.

List list;
if (coll instanceof List)
  list = (List)coll;
else
  list = new ArrayList(coll);

114voto

Jack Leow Punkte 21300

So ähnlich sollte es funktionieren, indem man die ArrayList-Konstruktor die eine Sammlung benötigt:

List theList = new ArrayList(coll);

34voto

Erel Segal-Halevi Punkte 29656

Ich denke, Paul Tomblins Antwort kann verschwenderisch sein, wenn coll bereits eine Liste ist, weil sie eine neue Liste erstellt und alle Elemente kopiert. Wenn coll viele Elemente enthält, kann dies sehr lange dauern.

Mein Vorschlag ist:

List list;
if (coll instanceof List)
  list = (List)coll;
else
  list = new ArrayList(coll);
Collections.sort(list);

34voto

Eyal Ofri Punkte 600

Ich glaube, man kann es so schreiben:

coll.stream().collect(Collectors.toList())

14voto

Aniket Sahrawat Punkte 11630

Java 10 eingeführt List#copyOf die zurückgibt unveränderbare Liste unter Beibehaltung der Reihenfolge:

List<Integer> list = List.copyOf(coll);

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