Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.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
使用Java Collectors.toMap将对象与特定字段分组_Java - Fatal编程技术网

使用Java Collectors.toMap将对象与特定字段分组

使用Java Collectors.toMap将对象与特定字段分组,java,Java,我想使用Collectors.toMap()函数按性别对Person对象进行分组,如下所述,但这并不像我预期的那样有效 class Person{ private Integer id; private String gender; private String name; public String getGender(){ return gender; } public Person(Integer id, String gender, St

我想使用
Collectors.toMap()
函数按性别对Person对象进行分组,如下所述,但这并不像我预期的那样有效

class Person{
   private Integer id;
   private String gender;
   private String name;
   public String getGender(){
       return gender;
   }
   public Person(Integer id, String gender, String name){
       this.id=id;
       this.gender=gender;
       this.name=name;    
   }
}


public static void main(String[]args){
   List<Person> persons=new ArrayList<>();
   persons.add(new Person(1,"Man","John"));
   persons.add(new Person(2,"Man","Steve"));
   persons.add(new Person(3,"Women","Linda"));
   persons.add(new Person(4,"Man","Bill"));
   persons.add(new Person(5,"Women","Siti"));
   persons.add(new Person(6,"Man","Buzzer"));

   Map<String,List<Person>> filtered=persons
            .stream()
            .collect(Collectors.toMap(Person:getGender:Function.identity()));

}
班级人员{
私有整数id;
私人字符串性别;
私有字符串名称;
公共字符串getGender(){
返回性别;
}
公共人物(整数id、字符串性别、字符串名称){
这个.id=id;
这个。性别=性别;
this.name=name;
}
}
公共静态void main(字符串[]args){
List persons=new ArrayList();
增加(新的人(1,“人”、“约翰”);
添加(新的人(2,“人”、“史蒂夫”);
新增(新增人员(3名,“女性”、“琳达”);
增加(新的人(4,“人”、“法案”);
新增(新增人员(5名,“女性”、“Siti”);
增加(新的人(6,“人”,“蜂鸣器”);
地图过滤=人
.stream()
.collect(Collectors.toMap(Person:getGender:Function.identity());
}
错误提示

不兼容类型:推理变量U的边界不兼容 等式约束:列表 下限:人,T#2,T#1 其中U,T#1,K,T#2是类型变量: U扩展方法toMap中声明的对象(函数尝试以下操作:

final var filtered = persons.stream().collect(Collectors.groupingBy(Person::getGender));
Collectors.toMap()
对您想要做的事情没有那么好。请尝试使用
Collectors.groupingBy()

Map filtered=persons.stream().collect(Collectors.groupingBy(Person::getGender));

这项工作很有效,但我想知道何时添加forEach((性别,p)->{System.out.println(性别};)这work@magicom,那么Collectors.groupingBy最佳用途是什么?顾名思义,groupingBy是对内容进行分组的最佳方法。因此,您有一个键和多个值。
toMap
更简单,只需接受两个函数即可创建键和值。@magicom,谢谢您的解释。。
Map<String,List<Person>> filtered = persons.stream().collect(Collectors.groupingBy(Person::getGender));