lambda - 在java中GroupBy并合并到一个列表中

标签 lambda java-8 collectors

Java 8 在 Collectors 中提供了 groupingBy 函数,但它给出了元素的映射。我需要将 map 转换为单个列表。

它也返回结果,但我想要的是对列表本身执行分组操作,这样我就不必重新分配它,因为在 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())
));

关于lambda - 在java中GroupBy并合并到一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51497686/

相关文章:

python - 如果可迭代对象的所有成员都为真,python 中是否有一个函数返回真?

java - Log4j2 导致 PreferIP6 失败

Java 8 Streams 按可选属性分组

java - Stream.sorted() 然后收集,还是收集然后 List.sort()?

c++ - C++ 中奇怪的函数声明和 lambdas

java - 将方法转换为 Lambda 表达式

java - 如何使用 Java 8 计算当前时间和下周六之间的秒数

java - Collectors.toSet() 和 HashSet

java - 很难理解 Java 消费者示例

java - 如何在java-8中查找流类型