繁体   English   中英

java8 - 从对象内的属性分组

[英]java8 - groupingby from a property inside an object

我想创建一个Map<String,List<A>>其中 A 包含 B 并且 groupby 是由 B 的属性组成的。

public class A{
        private int a;
        private ...
        private B b;
}

public class B{
           private String name;
           private ... 
}

我有一个

List<A> alist;

我想做这样的事情:

Map<String, List<A>> resultmap = alist.stream().collect(Collectors.groupingby(B::getName()));

除非这是不可能访问 B.

您只需要编写一个 lambda 表达式来访问b

Map<String, List<A>> resultMap = alist.stream()
                                      .collect(Collectors.groupingBy(a -> a.getB().getName()));

假设有一个 getter getB()来检索b属性,您可以在 lambda 表达式中调用它。


作为旁注,您当前的方法引用无效:您不需要B::getName()内的括号。

您可以使用 lambda 表达式而不是方法引用来执行此操作:

Map<String, List<A>> resultmap =     
    alist.stream().collect(Collectors.groupingby(a->a.getB().getName()));

在 Java 8 中,您需要将aA

Map<String, List<A>> resultmap =     
    alist.stream().collect(Collectors.groupingby(a->((A)a).getB().getName()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM