gpt4 book ai didi

Java 8流聚合一张图

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:27 24 4
gpt4 key购买 nike

我正在尝试做一些看似简单但到目前为止运气不佳的事情。我有一个 Map 列表,它们来自一堆并行的 CompletableFutures,然后必须加入结果。由于映射中的键是唯一的,因此需要合并值并生成与 SomeType 的组合列表关联的唯一键的新映射。例如:

map 1:key1 : Sometype1key2 : 某种​​类型 2

map 2key1 : Sometype3key2 : Sometype4

期望的最终结果: map 3:key1 : 某种​​类型,某种类型 3key2 : Sometype2, Sometype4

我尝试过使用 groupBy 和其他方法,但似乎大多数方法都假定使用 List 而不是 Map 开始,所以我无法找到一种直接的方法来做到这一点。

到目前为止,我有类似的东西:

 Map<String, List<Sometype>> volPercent = waitGroup.stream()
.map(CompletableFuture::join)
.flatMap((e) -> e.entrySet().stream())
.collect(Collectors.groupingBy());

我不确定的部分是需要按部分分组的内容。我试过 Map.Entry::getKey,但它没有编译:

Error:(69, 25) java: incompatible types: inference variable T has incompatible bounds
equality constraints: com.Sometype
lower bounds: java.util.Map.Entry<java.lang.String,com.Sometype>

最佳答案

我假设您从 map 流开始:

Stream<Map<String, Sometype>> input = ... ;

您在平面贴图和收集方面取得了很大进展。但是,您尝试的代码,

    input.flatMap(map -> map.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey));

给你一张 map ,它的键是String其值是 map 条目的列表,特别是List<Map.Entry<String,Sometype>> , 不是 List<Sometype>如你所愿。您需要做的是在按键分组后使用收集器的“下游”功能。你想要每个 Map.Entry并将其提取(映射)到它的值,即 Sometype .这是通过 mapping 完成的 Collection 家。

现在您可能有多个 Sometype 实例对于每个键,因此您需要将它们收集到一个列表中。这是使用 另一个 下游收集器完成的,它将它们收集到一个列表中。这是使用熟悉的 toList() 完成的。 Collection 家。

最终代码如下所示:

Map<String, List<Sometype>> result =
input.flatMap(map -> map.entrySet().stream())
.collect(groupingBy(Map.Entry::getKey,
mapping(Map.Entry::getValue,
toList())));

关于Java 8流聚合一张图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598683/

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