java8 - 来自对象内部属性的groupingby

时间:2016-02-23 11:01:35

标签: java list dictionary java-8

我想创建一个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.

3 个答案:

答案 0 :(得分:12)

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

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

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:0)

在Java 8中,您需要将[StringLength(256,...强制转换为a

A