Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java8-从对象内的属性进行分组_Java_List_Dictionary_Java 8 - Fatal编程技术网

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());
假设有一个getter
getB()
来检索
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分组一样。有什么想法吗?你能帮忙吗