我有一个有这些领域的班级学生:
private int id;
private String firstName;
private String lastName;
private String imageLink;
private String email;
private String status;
private String fullName;
private int classId;
private int percentage;
Button changeAttendanceButton;
ImageView attendanceImage;
ImageView photo;
现场"状态"可以有2个值:1。存在,2。缺席
然后我有Observable List:
private ObservableList<Student> allStudentsWithStatus = FXCollections.observableArrayList();
所以我将学生存储在此列表中。每个学生都有现状或缺席状态。
我需要按状态排序此ObservableList。我希望具有现状的学生成为该名单中的第一名。
任何提示?
如果有任何帮助,我将不胜感激。
答案 0 :(得分:3)
1.您可以创建自定义比较器:
class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student student1, Student student2) {
return student1.getStatus()
.compareTo(student2.getStatus());
}
//Override other methods if need to
}
或像这样创作
Comparator<Student> studentComparator = Comparator.comparing(Student::getStatus);
然后使用一个:
Collections.sort(allStudentsWithStatus, studentComparator);
或像这样使用
allStudentsWithStatus.sort(studentComparator);
2。使用 SortedList :
SortedList<Student> sortedStudents
= new SortedList<>(allStudentsWithStatus, studentComparator);
3.如果您需要其他操作或需要收集到其他集合 ,请使用流API 和比较器(最慢的方式):
allStudentsWithStatus.stream()
.sorted(Comparator.comparing(i -> i.getStatus()))
//other actions
//.filter(student -> student.getLastName().equals("Иванов"))
.collect(Collectors.toList());
//.collect(Collectors.toSet());