开发者社区> 问答> 正文

我们可以在以下情况下使用Java流吗?

我有一堂课,说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

展开
收起
montos 2020-03-21 20:01:26 1112 0
1 条回答
写回答
取消 提交回答
  • 使用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

    2020-03-21 20:04:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
OpenCrypto Unchaining the Java 立即下载
Java Your(Next) 立即下载
Java8简明教程 立即下载