如何从数组列表中获取最大元素?
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);
请帮助我!我必须获得最大平均值 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
更新你的学生 classclass 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);