Java 8 Groupingby基于可以为null的属性的对象列表
我有一个学生对象列表,如下所示Java 8 Groupingby基于可以为null的属性的对象列表,java-8,collectors,groupingby,Java 8,Collectors,Groupingby,我有一个学生对象列表,如下所示 Student1 DOB : 12/02/2010 Student2 DOB : 12/03/2010 Student1 DOB : 12/04/2010 Student4 DOB : Student2 DOB : Student3 DOB : 12/01/2010 Student{ String name; Date dob; } 我想根据DOB对学生进行分组,如下所示 Student1 DOB : 12/02/2010 Student2
Student1 DOB : 12/02/2010
Student2 DOB : 12/03/2010
Student1 DOB : 12/04/2010
Student4 DOB :
Student2 DOB :
Student3 DOB : 12/01/2010
Student{
String name;
Date dob;
}
我想根据DOB对学生进行分组,如下所示
Student1 DOB : 12/02/2010
Student2 DOB : 12/03/2010
Student1 DOB : 12/04/2010
Student4 DOB :
Student2 DOB :
Student3 DOB : 12/01/2010
Student{
String name;
Date dob;
}
Map<String, Optional<Student>> students = students.stream()
.collect(Collectors.groupingBy(
Student::getName,
Collectors.maxBy(Comparator.comparing(o -> o.getDob()))));
Map students=students.stream()
.collect(收集器.groupingBy(
学生::getName,
Collectors.maxBy(Comparator.comparing(o->o.getDob()));
这里getDob()有时会返回null,并抛出null指针异常。筛选器不是解决方案,因为它将完全避免dob为null的学生。如果属性为
null
,您希望实际执行什么比较<代码>比较.nullsLast类型示例可能有帮助您所说的学生按dob降序排列是什么意思。
?点3
和剩余学生对象之间的区别是什么
意味着每组都有空的DOB元素?@Rono修改了这个问题。第3点指出,在输出中,必须保持顺序Student1 DOB:12/03/2010 Student1 DOB:12/01/2010@Tester比较器。比较(o->o.getDob())
。试着用方法引用替换它:Comparator.comparating(Student::getDob)
第2点和第3点之间的区别是什么?当您想按顺序获取对象时,为什么要使用maxBy
?顾名思义,它将计算到最大元素,换句话说,一个元素。如果属性为null
,您希望实际执行什么比较<代码>比较.nullsLast类型示例可能有帮助您所说的学生按dob降序排列是什么意思。
?点3
和剩余学生对象之间的区别是什么
意味着每组都有空的DOB元素?@Rono修改了这个问题。第3点指出,在输出中,必须保持顺序Student1 DOB:12/03/2010 Student1 DOB:12/01/2010@Tester比较器。比较(o->o.getDob())
。试着用方法引用替换它:Comparator.comparating(Student::getDob)
第2点和第3点之间的区别是什么?当您想按顺序获取对象时,为什么要使用maxBy
?顾名思义,它将计算到最大元素,换句话说,一个元素。