如何从多个学生成绩ArrayList中获取全局最小与最大值?
如何获取学生成绩的全局最小和最大值?
嘿,你已经完成了最核心的部分——搞定了学生成绩的输入、单个学生成绩的管理,甚至能算出每个学生的成绩极值!现在就差最后一步把这些单个学生的最值汇总,找出全局的最小和最大值,其实非常简单,我给你两种实用的方案:
方案一:传统循环遍历(直观易理解)
首先,你需要先把所有学生对象存到一个集合里(比如List<Student> students,我猜你应该已经在这么做了),然后初始化两个变量用来跟踪全局的最小和最大值:
// 初始化全局最值,用Integer.MAX_VALUE/MIN_VALUE作为初始值,确保第一个学生的成绩能覆盖它们 int globalMin = Integer.MAX_VALUE; int globalMax = Integer.MIN_VALUE;
接下来遍历每个学生,拿他们的个人最值和全局最值做比较,更新全局值:
for (Student student : students) { int currentStudentMin = student.getMin(); int currentStudentMax = student.getMax(); // 如果当前学生的最小值比全局最小值还小,更新全局最小值 if (currentStudentMin < globalMin) { globalMin = currentStudentMin; } // 如果当前学生的最大值比全局最大值还大,更新全局最大值 if (currentStudentMax > globalMax) { globalMax = currentStudentMax; } }
遍历结束后,globalMin就是所有学生成绩里的全局最小值,globalMax就是全局最大值啦。
方案二:Java 8 Stream API(简洁优雅)
如果你熟悉Java 8及以上的Stream特性,可以用更清爽的方式实现:
// 获取全局最小值 int globalMin = students.stream() .mapToInt(Student::getMin) // 把每个学生的最小值转成int流 .min() // 找出流中的最小值 .orElseThrow(() -> new IllegalStateException("没有学生数据哦")); // 处理空集合的情况 // 获取全局最大值 int globalMax = students.stream() .mapToInt(Student::getMax) .max() .orElseThrow(() -> new IllegalStateException("没有学生数据哦"));
这里的orElseThrow是防止当没有学生数据时出现异常,你也可以换成orElse(0)之类的默认值,根据你的业务需求调整就行。
小提示
如果你的getMin()和getMax()方法返回的是Integer而非int,那初始化全局变量的时候可以用null,然后在循环里先判断是否为null再赋值,不过用int类型的极值初始化会更省心,避免空指针问题。
内容的提问来源于stack exchange,提问作者Justin Robert
相关产品推荐
相关产品推荐

