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?

3voto

thomas.adamjak Punkte 128

Ich erstelle einfache static Methode:

public static <U> List<U> convertSetToList(Set<U> set)
{
    return new ArrayList<U>(set);
}

... oder wenn Sie die Art der Liste festlegen möchten, können Sie verwenden:

public static <U, L extends List<U>> List<U> convertSetToList(Set<U> set, Class<L> clazz) throws InstantiationException, IllegalAccessException
{
    L list = clazz.newInstance();
    list.addAll(set);
    return list;
}

2voto

Stand Yang Punkte 47

Kürzlich habe ich dies gefunden:

ArrayList<T> yourList = Collections.list(Collections.enumeration(yourSet<T>));

0voto

Karthic.K Punkte 386

Ich habe festgestellt, dass dies gut funktioniert und nützlich ist, um eine Liste aus einer Menge zu erstellen.

ArrayList < String > L1 = new ArrayList < String > ();
L1.addAll(ActualMap.keySet());
for (String x: L1) {
    System.out.println(x.toString());
}

0voto

cdalxndr Punkte 1115

Sie konvertieren Set a List ohne Bestellinformationen (wie Sortierung) hinzuzufügen, nur um sie in der Karte zu speichern.

Denn Set ist unsortiert und es werden keine Bestellinformationen hinzugefügt, List sollte nicht verwendet werden, da sie zufällig geordnete Daten enthält und alle ihre Methoden, die sich auf geordnete Daten beziehen, mehrdeutig sind.

Sie sollten Folgendes verwenden Collection Schnittstelle, die sowohl die Set y List auf der Karte. Auf diese Weise wird kein zusätzlicher Speicherplatz benötigt, da Sie die Polymorphie verwenden, anstatt Daten zu kopieren.

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

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

Haftungsausschluss: meine Bearbeitung eines ähnlich Antwort wurde abgelehnt, also habe ich meine eigene Antwort mit zusätzlichen Informationen hinzugefügt

-16voto

Muhammad Imran Tariq Punkte 21390
Map<String, List> mainMap = new HashMap<String, List>();

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

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