使用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));