我有这个Map
:
Map<Integer, Set<String>> map = ...
我有这门课Foo
:
class Foo {
int id;
String name;
}
我想将 map 转换为 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);
}
}
我觉得太麻烦了。
最佳答案
您可以拥有以下内容:
List<Foo> list = map.entrySet()
.stream()
.flatMap(e -> e.getValue().stream().map(name -> new Foo(e.getKey(), name)))
.collect(toList());
对于映射的每个条目,我们创建一个值的 Stream 并将其映射到相应的 Foo
,然后使用 flatMap
将其展平。
关于Java 8 : Convert a map with string values to a list containg a different type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939641/