2016-12-04 3 views
0

Ich habe ein HashMap<Foo, ArrayList<Bar>> map mit folgenden Struktur:Java: get Liste der Einträge aus Listen in HashMap verschachtelt

|-- a 
| |-- a1 
| |-- a2 
| `-- a3 
| 
`-- b 
    |-- b1 
    |-- b2 
    `-- b3 

wo a und b sind Objekte vom Typ Foo und a1, a2 usw. Objekte der Geben Sie Bar ein.

Was ich haben will, ist ein List<Bar> mit folgenden Struktur:

|-- a1 
|-- a2 
|-- a3 
|-- b1 
|-- b2 
`-- b3 

Im Moment habe ich diesen Code:

ArrayList<Bar> tempList = new ArrayList<>(); 
map.values().forEach(tempList::addAll); 
return tempList; 

Aber das fühlt sich ein bisschen ungeschickt und unelegant. Wie erreiche ich das mit der Standard-Java-API, vorzugsweise mit java.util.Stream (oder Lambda-Ausdrücken)?

+1

Siehe auch http://stackoverflow.com/questions/31056919/concatenate-the-string-values-of-all-maps-in-a-list oder http://stackoverflow.com/questions/ 35682522/convert-mapstring-navigablesmaplong-collectionstring-zu-liststring-usin – Tunaki

Antwort

3
List<Bar> bars = map.values() 
        .stream() 
        .flatMap(Collection::stream) 
        .collect(Collectors.toList());