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