如何从数组列表中获取最大元素?

How to get the max element from the arraylist?

请帮助我!我必须获得最大平均值 grade.How 我们可以从 arraylist 中取出元素并将其与另一个元素进行比较吗?

import java.util.ArrayList;

class Student {

  String name;
  double averageGrade;

  public Student(String name, double averageGrade) {
    this.name = name;
    this.averageGrade = averageGrade;
  }
}

public class exam2014_07 {

  public static void main(String[] args) {
    double max = 0;
    Student s1 = new Student("Georgi", 5.50);
    Student s2 = new Student("Ivan", 5.70);
    Student s3 = new Student("Maria", 5.80);

    ArrayList<Student> student = new ArrayList<Student>();
    student.add(s1);
    student.add(s2);
    student.add(s3);

    for (Student s : student) {
      //i need the max grade  
        if (max > s.averageGrade) {
            max = s.averageGrade;
            System.out.println("Name: " + s.name + "average grade: " + s.averageGrade);
        }   
    }
  }
}

你应该检查当前学生的成绩是否大于之前的最大值,只有在检查完所有学生的成绩后才在循环结束时打印。

Student best = null;
for (Student s : student) {
  if (max < s.averageGrade) {
      max = s.averageGrade;
      best = s;
  }   
}
System.out.println("Name: " + best.name + "average grade: " + best.averageGrade);

由于您将 max 设置为 0 然后 max > s.averageGrade 它不会得到结果,因为 0 总是小于平均值。如果将大于翻转为小于;那么你的 for 循环的工作方式将打印出所有答案,因为每个平均值都高于先前插入的值。

您可以使用 java 流来查找最大值:

Student s = student.stream().max((m1, m2) -> m1.averageGrade.compareTo(m2.averageGrade)).orElse(null);
if (s != null)
  System.out.println("Name: " + s.name + "average grade: " + s.averageGrade);

并将您的 averageGrade 从原始 double 更改为 Double 这样我们就可以利用 compareTo

更新

要利用 java 8 并使流更流畅,我们可以执行以下操作:

用 public getters

更新你的学生 class
class Student {

  private String name;
  private Double averageGrade;

  public Student(String name, double averageGrade) {
    this.name = name;
    this.averageGrade = averageGrade;
  }
  
  public String getName() {
    return this.name;
  }
  
  public Double getAverageGrade() {
    return this.averageGrade;
  }
}

然后我们可以修改代码以找到最大平均值:

Optional<Student> student = students.stream()
                  .max(Comparator.comparingDouble(Student::getAverageGrade));
    
if (student.isPresent()) {
  Student s = student.get();
  System.out.println("Name: " + s.getName() + "average grade: " + s.getAverageGrade());
}

您可以使用 Stream API,从 Student 对象中获取 averageGrade 并在 [=14= 中获取最大值]

OptionalDouble maxOptionalDouble = student.stream().mapToDouble(stud -> stud.averageGrade).max();
if (maxOptionalDouble.isPresent()) {
    System.out.println(maxOptionalDouble.getAsDouble());
}

,或者按照averageGrade降序对学生进行排序,取第一个

Comparator<Student> cmp = (stud1, stud2) -> Double.valueOf(stud2.averageGrade)
                .compareTo(Double.valueOf(stud1.averageGrade));
student.sort(cmp);
Student std = student.get(0);
System.out.println("Name: " + std.name + "average grade: " + std.averageGrade);