java - 如何使用 Java lambda 将 List<Foo> 收集到 Map<Bar, List<Baz>>?

标签 java lambda java-stream collectors

我有一个对象 Foo引用了 BarBaz对象:

public class Foo {
    private Bar bar;
    private Baz baz;

    public Foo(Bar bar, Baz baz) {
       this.bar = bar;
       this.baz = baz;
    }
}

我有一个 List<Foo>我想转换成 Map .我希望 key 为 Bar值为 List<Baz> .

我可以创建一个 Map其中 Bar是键,值是 List<Foo> :

Map<Bar, List<Foo>> mapBarToFoos = foos.stream().collect(Collectors.groupingBy(Foo::getBar));

我不知道如何进行最后一步并将值 List 转换为 List<Baz> .是否存在我未看到的值的 lambda 转换?

最佳答案

我觉得你想要

list.stream().collect(groupingBy(Foo::getBar, 
    mapping(Foo::getBaz, toList())));

其中 getBaz 是转换分组的 Foo 的“下游收集器”,然后是另一个创建列表的收集器。

关于java - 如何使用 Java lambda 将 List<Foo> 收集到 Map<Bar, List<Baz>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732841/

相关文章:

java - 表 "users"上的更新或删除违反了表 "fk_owner_id"上的外键约束 "movie_list"

Java 8 : Syntax for Implementing java. util.function.Function 作为 Lambda 表达式

Java 8 Lambda 将函数或变量作为参数传递

c++ - boost::lambda::var 嵌套在 boost::bind 中不等同于 boost::lambda::var 本身

java - 如何将来自父 Map 的 Map 值与 java 8 流结合起来

java - 更改内部类中变量的值

java - 如何结合 AngularJS 和 Thymeleaf 模板

java - 使用比较器排序(特定值除外)

Java 8 Stream.skip 与谓词

java - 通过 map 流进行过滤并收集到单个列表中?