wake-up-neo.com

Wie konvertiere ich eine Karte in eine Liste in Java?

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?

633
Javaa
List<Value> list = new ArrayList<Value>(map.values());

vorausgesetzt:

Map<Key,Value> map;
1237
cletus

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 
129
coobird

Verwenden der Java 8 Streams-API.

List<Value> values = map.values().stream().collect(Collectors.toList());
34
Matej Kormuth

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());

22
java dude

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.
22
Diego Amicabile

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());
13
maneesh

Sie können es so machen

List<Value> list = new ArrayList<Value>(map.values());
6
user3752441
    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.

4
user11

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).

4
M0les
// 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());    
}
3
saurabhgoyal795

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;
}
0
Hiral Pancholi
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());
}
0
Hakan Anlamaz
"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());
 } "
0
siva prasad