java8-从对象内的属性进行分组
我想创建一个java8-从对象内的属性进行分组,java,list,dictionary,java-8,Java,List,Dictionary,Java 8,我想创建一个映射,其中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, L
映射
,其中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()));
Map resultmap=alist.stream().collect(Collectors.groupingby(B::getName());
除了无法访问B之外。您可以使用lambda表达式而不是方法引用来执行此操作:
Map<String, List<A>> resultmap =
alist.stream().collect(Collectors.groupingby(a->a.getB().getName()));
映射结果映射=
collect(Collectors.groupingby(a->a.getB().getName());
您只需编写一个lambda表达式即可访问b
:
Map<String, List<A>> resultMap = alist.stream()
.collect(Collectors.groupingBy(a -> a.getB().getName()));
Map resultMap=alist.stream()
.collect(Collectors.groupingBy(a->a.getB().getName());
假设有一个gettergetB()
来检索b
属性,您可以在lambda表达式中调用它
作为旁注,您当前的方法引用无效:您不需要在Java 8中的
B::getName()
中使用括号,您需要将a
转换为a
:
Map<String, List<A>> resultmap =
alist.stream().collect(Collectors.groupingby(a->((A)a).getB().getName()));
映射结果映射=
collector.groupingby(a->((a)a.getB().getName());
我糟糕的自动压缩不起作用,我尝试了许多其他复杂的流方法。谢谢你的回答。嘿,我有同样的东西,lambda对我不起作用,它就像java不识别a以便按b分组一样。有什么想法吗?你能帮忙吗