【发布时间】:2021-08-07 12:47:37
【问题描述】:
我有一个列表,并且必须在那里找到特定的对象。 我必须按学生的平均标记值对列表进行排序,并创建函数 搜索具有第二高值的学生。如果它与其他学生重复,则函数将返回较年轻的学生。 此任务的另一个要求(要正确解决)是我无法创建任何对象。下面我留下了我正在使用的类的代码:
import java.time.LocalDate;
import java.util.Comparator;
import java.util.List;
public class Student implements Comparator<Student>{
private String firstName;
private String lastName;
private LocalDate dateOfBirth;
private double averageMark;
public double getAverageMark() {
return averageMark;
}
//function below must find student that I described upper. Currently
//function is incomplete because I still try to find correct solution
public static Student findSecondBestStudent(List<Student> students) {
return students.stream().sorted(Comparator.reverseOrder());
}
@Override
public int compare(Student o1, Student o2) {
return (int) (o1.getAverageMark() - o2.getAverageMark());
}
}
现在我确实尝试通过对流进行反向排序来解决这个问题,然后删除流的第一个值并比较流的两个下一个对象并返回正确的对象。 我可以使用 for 循环解决它,但这个解决方案与任务条件不匹配(需要创建对象)
【问题讨论】:
-
“我无法创建任何对象”是什么意思?您可能正在排序/搜索的学生列表也是 Student 类的对象列表,不是吗?
-
是的。我的意思是我不能创建额外的对象,比如变量/数组等。我必须对函数 args 中给出的列表进行所有操作。
标签: java sorting collections stream