如何按私有字段对列表进行排序?
2022-09-02 05:00:05
我的实体类如下所示:
public class Student {
private int grade;
// other fields and methods
}
我这样使用它:
List<Student> students = ...;
考虑到它是一个私有字段,我如何排序依据 ,students
grade
我的实体类如下所示:
public class Student {
private int grade;
// other fields and methods
}
我这样使用它:
List<Student> students = ...;
考虑到它是一个私有字段,我如何排序依据 ,students
grade
您有以下选择:
grade
grade
Comparator
Student
Student
Comparable
解决方案示例:3
public class Student {
private int grade;
public static Comparator<Student> byGrade = Comparator.comparing(s -> s.grade);
}
并像这样使用它:
List<Student> students = Arrays.asList(student2, student3, student1);
students.sort(Student.byGrade);
System.out.println(students);
这是我最喜欢的解决方案,因为:
Comparator
解决方案示例:4
public class Student implements Comparable {
private int grade;
@Override
public int compareTo(Object other) {
if (other instanceof Student) {
return Integer.compare(this.grade, ((Student) other).grade);
}
return -1;
}
}
您可以像这样在任何地方进行排序:
List<Student> students = Arrays.asList(student2, student3, student1);
Collections.sort(students);
System.out.println(students);
此解决方案的各个方面:
grade
树状图)
)通常,如果您需要一种取决于学生成绩的行为,那么此信息必须是可访问的 - 添加允许其他代码访问它的方法或属性。
因此,最简单的修复方法是:
public class Student implements IStudent {
...
private int grade;
...
// other fields and methods
public int getGrade() {
return grade;
}
}
您可能还应该扩展界面:)IStudent
但是,如果您只需要将其用于排序,则可以使用其他答案中已经提出的想法:实现Compable
接口。通过这种方式,您可以保留隐藏,并在方法中使用它。grade
int compareTo