我们如何通过使用Java流以最佳方式将List 转向Map >。
注意:propertyA不是唯一的
//pseudo-code
class Foo
propertyA //not unique
List<propertyB>
到目前为止,我有以下内容:
fooList.stream()
.collect(Collectors.groupingBy(Foo::propertyA,
Collectors.mapping(Foo::propertyB, Collectors.toList())))
结果是
Map<propretyA, List<List<propretyB>>>
,尚未为其值展平。 最佳答案
您可以使用Java 9+ Collectors.flatMapping
:
Map<propretyA, List<propretyB>> result = fooList.stream()
.collect(Collectors.groupingBy(Foo::propertyA,
Collectors.flatMapping(foo -> foo.propertyB().stream(),
Collectors.toList())));
另一种方法(Java8 +)是通过使用this answer像
Collectors.toMap
中一样。Java8 +的另一种方法是不使用流,而是使用ojit_a:
Map<propretyA, List<propretyB>> result = new LinkedHashMap<>();
fooList.forEach(foo -> result.computeIfAbsent(foo.propertyA(), k -> new ArrayList<>())
.addAll(foo.propertyB()));
关于java - Java流将 map 类属性列表转换为扁平化 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55149854/