Was ist der beste Weg, um einen Map<key,value>
in einen List<value>
umzuwandeln? Durchlaufen Sie einfach alle Werte und fügen Sie sie in eine Liste ein, oder übersehen Sie etwas?
List<Value> list = new ArrayList<Value>(map.values());
vorausgesetzt:
Map<Key,Value> map;
Das Problem hierbei ist, dass Map
zwei Werte (einen Schlüssel und einen Wert) hat, während List
nur einen Wert (ein Element) hat.
Daher können Sie am besten entweder eine List
der Schlüssel oder der Werte abrufen. (Es sei denn, wir erstellen einen Wrapper, um das Schlüssel/Wert-Paar festzuhalten.).
Angenommen, wir haben eine Map
:
_Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
_
Die Schlüssel als List
können erhalten werden, indem ein neues ArrayList
aus einem Set
erstellt wird, das von der Map.keySet
-Methode zurückgegeben wird:
_List<String> list = new ArrayList<String>(m.keySet());
_
Während die Werte als List
abgerufen werden können, indem ein neues ArrayList
aus einem Collection
erstellt wird, das von der Map.values
-Methode zurückgegeben wird:
_List<String> list = new ArrayList<String>(m.values());
_
Das Ergebnis des Abrufs der List
von Schlüsseln:
Apfel Noch ein Hallo
Das Ergebnis des Abrufs der List
von Werten:
3.14 Element Welt
Verwenden der Java 8 Streams-API.
List<Value> values = map.values().stream().collect(Collectors.toList());
map.entrySet()
gibt Ihnen eine Sammlung von Map.Entry
Objekten, die sowohl Schlüssel als auch Wert enthalten. Sie können dies dann in ein beliebiges Sammlungsobjekt umwandeln, z. B. new ArrayList(map.entrySet())
;
eine liste von was?
Angenommen, map
ist Ihre Instanz von Map
map.values()
gibt ein Collection
zurück, das alle Kartenwerte enthält.map.keySet()
gibt ein Set
zurück, das alle Schlüssel der Karte enthält.Ich nehme an, Sie möchten die in Map
enthaltenen Werte in list
konvertieren? Am einfachsten ist es, die Methode values()
der Schnittstelle Map
aufzurufen. Dies gibt die Collection
der in Map
enthaltenen Wertobjekte zurück.
Beachten Sie, dass dieses Collection
durch das Map
-Objekt unterstützt wird und alle Änderungen am Map
-Objekt hier wiedergegeben werden. Wenn Sie also eine separate Kopie möchten, die nicht an Ihr Map
Objekt gebunden ist, erstellen Sie einfach ein neues List
Objekt wie ein ArrayList
, indem Sie den Wert Collection
wie unten angeben.
ArrayList<String> list = new ArrayList<String>(map.values());
Sie können es so machen
List<Value> list = new ArrayList<Value>(map.values());
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("Java", 20);
map.put("C++", 45);
Set <Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
die Liste kann sowohl Schlüssel- als auch Wertepaare enthalten. Sie können auch Schlüssel und Wert mit Map.Entry abrufen, indem Sie die Liste durchlaufen.
Wenn Sie sicherstellen möchten, dass die Werte in dem resultierenden List<Value>
in der Schlüsselreihenfolge des Eingangs Map<Key, Value>
liegen, müssen Sie SortedMap
irgendwie "über" gehen.
Entweder Start mit einer konkreten Implementierung von SortedMap
(z. B. TreeMap
) oder fügen Sie Ihre Eingabe Map
in SortedMap
ein, bevor Sie diese in List
konvertieren. z.B.:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
Andernfalls erhalten Sie die systemeigene Reihenfolge, die die Implementierung von Map
bereitstellt. Dies kann häufig eine andere als die natürliche Schlüsselreihenfolge sein (versuchen Sie es mit Hashtable
oder ConcurrentHashMap
, um Abwechslung zu erzielen).
// you can use this
List<Value> list = new ArrayList<Value>(map.values());
// or you may use
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());
}
Hier ist die generische Methode zum Abrufen von Werten aus der Karte.
public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
List<T> thingList = new ArrayList<>();
for (Map.Entry<String, T> entry : map.entrySet()) {
thingList.add(entry.getValue());
}
return thingList;
}
HashMap<Integer, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
return new ArrayList<String>((Collection<? extends String>) map.values());
}
"Map<String , String > map = new HapshMap<String , String>;
map.add("one","Java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "