2017-03-22 7 views
2

Ich weiß HashMap in Liste konvertieren kann von List<String> list = new ArrayList<>(hashMap.values()); durchgeführt werden, aber wie wäre es mit HashMap von HashMap? Wie kann man es in ArrayList<ArrayList<String>> konvertieren?

Meine Idee ist bisher List<List<String>> list = new ArrayList(hashMap.values());, aber wie innere HashMap in Liste mit/ohne Iterate konvertieren?Konvertieren HashMap von HashMap in ArrayList von ArrayList

Antwort

1

Für Nicht-Java-8 können Sie verwenden

1.) Fetch Eintrag Gruppe von Ihrem hashMapOfMaps

2.) hashMapOfMaps.getValue() wird retrunHashMap<String, String> und dann .values() die String Werte der inneren Karte zurückgeben

for (Entry<String, HashMap<String, String>> entry: hashMapOfMaps.entrySet()) { 
     listOfLists.add(new ArrayList<String>(entry.getValue().values())); 
    }             |   | 
                inner-Map  | 
                    | 
                 inner-Map's string values 
2
map.values().stream() // a stream of Map<String, String> 
    .map(innerMap -> new ArrayList<>(innerMap.values()) // a stream of List<String> 
    .collect(Collectors.toList()); // List of List<String> 

Natürlich verlieren Sie alle wichtigen Informationen.

+0

Woher kommt 'innerMap'? Es gibt keine Variable, die den Wert der inneren Karte enthält, nicht wahr? – Newbie

+1

'innerMap -> neue ArrayList <> (innerMap.values ​​())' ist ein Lambda, Sie können der Variablen in der Definition einen beliebigen Namen geben, und Sie können es im Funktionsteil verwenden. 'x -> new ArrayList <> (x.values ​​())' hätte auch funktioniert, ist aber weniger lesbar. Es hängt jedoch davon ab, ob Java 8 für Sie verfügbar ist. Dies hängt davon ab, für welche Android-API-Version Sie entwickeln. – john16384

0

Da Sie dies auf Android wollen Sie möglicherweise nicht Java 8 Streams verwenden möchten. Hier für JDK 7

HashMap<String, HashMap<String, String>> mapOpfMap = new HashMap<>(); 
List<List<String>> listOfList = new ArrayList<>(); 

Iterator<Map.Entry<String, HashMap<String, String>>> it = mapOpfMap.entrySet().iterator(); 
    while(it.hasNext()){ 
     Map.Entry<String, HashMap<String, String>> value = it.next(); 
     value.getKey(); // here is the key if you need it 
     listOfList.add(new ArrayList<>(value.getValue().values())); 
    } 
Verwandte Themen