gpt4 book ai didi

Java 流映射类属性列表到扁平化映射

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:09 26 4
gpt4 key购买 nike

我们如何使用 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>>>它的值(value)尚未被压平。

最佳答案

您可以使用 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+) 是使用 Collectors.toMap,如 this answer .

另一种 Java8+ 方法是不使用流,而是使用 Map.computeIfAbsent相反:

Map<propretyA, List<propretyB>> result = new LinkedHashMap<>();
fooList.forEach(foo -> result.computeIfAbsent(foo.propertyA(), k -> new ArrayList<>())
.addAll(foo.propertyB()));

关于Java 流映射类属性列表到扁平化映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com