按价值Java对ObservableList对象进行排序

时间:2018-04-04 15:42:26

标签: java arrays sorting javafx

我有一个有这些领域的班级学生:

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。我希望具有现状的学生成为该名单中的第一名。

任何提示?

如果有任何帮助,我将不胜感激。

1 个答案:

答案 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());