So konvertieren Sie eine Karte, um die Liste in Java?
-
06-07-2019 - |
Frage
Was ist der beste Weg, um konvertieren Map<key,value>
zu einem List<value>
?Nur iterieren über alle Werte und fügen Sie Sie in eine Liste oder bin ich mit Blick auf etwas?
Lösung
List<Value> list = new ArrayList<Value>(map.values());
Annahme:
Map<Key,Value> map;
Andere Tipps
Das Problem ist hier, dass Map
hat zwei Werte (Schlüssel und Wert), während ein List
hat nur ein Wert (ein element).
Daher ist das beste, was getan werden kann, ist entweder ein List
der Schlüssel oder die Werte.(Es sei denn, wir machen einen wrapper zu halten, um die Schlüssel/Wert-paar).
Sagen wir, wir haben ein Map
:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
Die Tasten als List
kann erhalten werden, indem eine neue ArrayList
aus einem Set
zurück durch die Map.keySet
Methode:
List<String> list = new ArrayList<String>(m.keySet());
Während die Werte als List
kann erhalten werden, erstellen Sie eine neue ArrayList
aus einem Collection
zurück durch die Map.values
Methode:
List<String> list = new ArrayList<String>(m.values());
Das Ergebnis bekommen, das List
der Schlüssel:
Apple Another Hello
Das Ergebnis bekommen, das List
Werte:
3.14 Element World
das Java 8 Streams API verwenden.
List<Value> values = map.values().stream().collect(Collectors.toList());
map.entrySet()
gibt Ihnen eine Sammlung von Map.Entry
Objekte beide Schlüssel und Wert enthält. Anschließend können Sie diese in jede Sammlung Objekt verwandeln Sie, wie new ArrayList(map.entrySet())
mögen;
eine Liste von dem, was?
map
Unter der Annahme, ist die Instanz von Map
-
map.values()
eineCollection
zurückkehren alle von der Karte Werte enthält. -
map.keySet()
einSet
zurückkehrt alle von der Karte der Schlüssel enthalten.
Ich denke, man die Werte in der Map
zu einem list
enthalten konvertieren? Am einfachsten ist es, das Verfahren des values()
Map
Schnittstelle zu nennen. Dies wird die Collection
von Wertobjekten, die in den Map
zurück.
Beachten Sie, dass dieser Collection
vom Map
Objekt und alle Änderungen an das Map
Objekt werden hier unterstützt wird reflektieren. Also, wenn Sie eine separate Kopie nicht gebunden zu Ihrem Map
Objekt mögen, erstellen Sie einfach ein neues List
Objekt wie ein ArrayList
den Wert Collection
vorbei, wie unten.
ArrayList<String> list = new ArrayList<String>(map.values());
Sie können es so machen
List<Value> list = new ArrayList<Value>(map.values());
Wenn Sie die Werte in der resultierenden List<Value>
sind in der Schlüssel Ordnung des Eingangs Map<Key, Value>
sicherstellen wollen, müssen Sie SortedMap
auf „über go“ irgendwie.
So oder starten mit einer konkreten SortedMap
Implementierung (wie TreeMap
) oder geben Sie Ihre Eingabe Map
in eine SortedMap
vor der Konvertierung, das zu List
. z.
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
Sonst wirst du bekommen, was nativer die Map
Implementierung einer Bestellung liefert, die oft etwas anderes als die natürliche Schlüssel Ordnung sein kann (Versuchen Hashtable
oder ConcurrentHashMap
, für Vielfalt).
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);
Wir können beide Schlüssel-Wert-Paar in list.Also haben kann durch Iteration über Liste mit Map.Entry Schlüssel und Wert erhalten.
// 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());
}
"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());
} "
Hier ist die generische Methode, um Werte von Karte zu bekommen.
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());
}