zhu*_*wei 4 java java-8 java-stream map-function
我有这个Map:
Map<Integer, Set<String>> map = ...
Run Code Online (Sandbox Code Playgroud)
我有这堂课Foo:
class Foo {
int id;
String name;
}
Run Code Online (Sandbox Code Playgroud)
我想将地图转换为List<Foo>.在Java 8中有一种方便的方式来做到这一点吗?
目前,我的方式是:
List<Foo> list = new ArrayList<>((int) map.values().flatMap(e->e.stream()).count()));
for(Integer id : map.keySet()){
for(String name : map.get(id)){
Foo foo = new Foo(id,name);
list.add(foo);
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得这太麻烦了.
您可以拥有以下内容:
List<Foo> list = map.entrySet()
.stream()
.flatMap(e -> e.getValue().stream().map(name -> new Foo(e.getKey(), name)))
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
对于地图的每个条目,我们创建一个值的Stream并将其映射到相应的Foo,然后使用它来展平它flatMap.