gpt4 book ai didi

java - 是否可以在不创建中间映射的情况下对收集器分组中的每个列表进行操作?

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

我有以下代码对列表进行分组,然后对每个分组列表进行操作,依次将其转换为单个项目:

Map<Integer, List<Record>> recordsGroupedById = myList.stream()
.collect(Collectors.groupingBy(r -> r.get("complex_id")));

List<Complex> whatIwant = recordsGroupedById.values().stream().map(this::toComplex)
.collect(Collectors.toList());

toComplex 函数如下所示:

Complex toComplex(List<Record> records);

我觉得我可以在不创建中间映射的情况下做到这一点,或许可以使用 reduce。有什么想法吗?

输入流按我希望在流中按顺序分组的元素排序。在正常的循环结构中,我能够确定下一个组何时开始并在那个时候创建​​一个“复合体”。

最佳答案

创建一个将 groupingBy 和您的后处理函数与 collectingAndThen 结合在一起的收集器.

Map<Integer, Complex> map = myList.stream()
.collect(collectingAndThen(groupingBy(r -> r.get("complex_id"),
Xxx::toComplex));

如果你只想要一个 Collection<Complex>在这里,您可以向 map 询问其 values() .

关于java - 是否可以在不创建中间映射的情况下对收集器分组中的每个列表进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34900704/

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