我有一堂课,说Student有一个marks类型为Double 的字段。我正在创建一个listStudent对象。每个学生对象可能在不同的学生对象中具有marks设置为null或设置为相同值的字段。我有一个问题要list根据以下条件从此返回单个学生对象:
当所有学生都相同时,marks则返回null。 否则返回成绩最高的学生marks。 我想知道是否有使用Java流api更好的方法来完成它。先感谢您。
学生班:
public class Student {
private Double marks;
public Double getMarks() {
return marks;
}
public void setMarks(Double marks) {
this.marks = marks;
}
@Override
public String toString() {
return "Student [marks=" + marks + "]";
}
public Student(Double marks) {
super();
this.marks = marks;
}
}
问题来源stackoverflow
使用Streams时,您可以在收集TreeMap并验证lastEntryas的同时执行以下操作:
private Student highestMarkUniqueStudent(List<Student> studentList) {
if(studentList.size() == 0) return null;
if(studentList.size() == 1) return studentList.get(0);
TreeMap<Integer, List<Student>> map = new TreeMap<>(studentList.stream()
.collect(Collectors.groupingBy(Student::getMarks)));
List<Student> highestMarkStudents = map.lastEntry().getValue();
// only one highest or all same marks or more than one with highest mark
return highestMarkStudents.size() == 1 ? highestMarkStudents.get(0) : null;
}
回答来源stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。