GroupBy并合并到java中的单个列表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GroupBy并合并到java中的单个列表中相关的知识,希望对你有一定的参考价值。

Java 8在收集器中提供了groupingBy函数,但它提供了元素映射。我需要将地图转换为单个列表。

它也返回结果,但我想要的是对列表本身执行分组操作,这样我就不必重新分配它,因为在lambda表达式中不能重新分配。

我怎样才能做到这一点?

我想实现这个目标:

Map<String, List<Node>> nodeListGrouped = nodeList.stream().collect(Collectors.groupingBy(node -> node.getGroupName()));

将nodeListGrouped转换为单个List

但nodeListGrouped.values()返回Collection(List)

答案

我认为这就是你要找的东西(虽然我还没编译过)

List<Node> list = 
         nodeList.stream()
                 .collect(Collectors.collectingAndThen(
                     Collectors.groupingBy(Node::getGroupName),
                     map -> map.values()
                               .stream()
                               .flatMap(List::stream)
                               .collect(Collectors.toList())
));
另一答案

Collection<List<Node>>中的地图值展平为List<Node>几乎肯定不是你想要的,因为它实际上会产生与初始列表相同的结果;如果你确实想得到一个List<Node>作为结果然后不做任何事情,因为这是初始列表已经提供的。

你肯定需要重新思考你想要完​​成什么。问问你自己为什么我需要分组才能得到与初始列表相同的结果?一旦你找到答案,也许你会发现你根本不需要这样做,或者可能有其他方法可以更好地完成你的任务。

另一答案

我没有看到将地图转换回列表的好处,因为您将丢失分组键。你可以做的是通过调用List<Map.Entry<String, List<Node>>>方法而不是entrySet()将地图转换回values()

以上是关于GroupBy并合并到java中的单个列表中的主要内容,如果未能解决你的问题,请参考以下文章

将列表中的 n 个 DF 合并到单个 DataFrame - Scala

Spark Column 将所有列表合并为 1 个单个列表

将排序列表与Java中的迭代器合并

如何将字典列表合并到单个字典中?

使用列名数组中的 UDF 将列合并到单个映射中

将多列中的列表合并到熊猫中的单列