【问题标题】:java8 - groupingby from a property inside an objectjava8 - 从对象内的属性分组
【发布时间】:2016-06-05 04:23:25
【问题描述】:

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

【问题讨论】:

    标签: java list dictionary java-8


    【解决方案1】:

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

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

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


    附带说明,您当前的方法引用无效:您不需要 B::getName() 中的括号。

    【讨论】:

    • 我糟糕的自动压缩不起作用,我尝试了许多其他复杂的流方法。谢谢你的回答。
    • 嘿,我有同样的事情,而 lambda 对我不起作用,就像 java 不识别 a 以便按 b 分组一样。有什么想法吗?
    【解决方案2】:

    您可以使用 lambda 表达式而不是方法引用来做到这一点:

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

    【讨论】:

    【解决方案3】:

    在 Java 8 中,您需要将 a 转换为 A

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

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多