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?

War es hilfreich?

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() eine Collection zurückkehren alle von der Karte Werte enthält.
  • map.keySet() ein Set 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());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top