自定义Comparator 实现对象数据的排序
我们一般使用Comparator来比较两个基本数据类型的大小,并根据大小来实现排序,但是遇到定制的场景,就需要自定义
背景目的: 一个学生对象,有姓名、性别、分数列表3个属性,定义一个学生列表,实现分数列表不为null的学生对象排在前面
- 定义学生对象
public class Student {
String name;
String sex;
List<Integer> scoreList;
public List<Integer> getScoreList() {
return scoreList;
}
public void setScoreList(List<Integer> scoreList) {
this.scoreList = scoreList;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", scoreList=" + scoreList +
'}';
}
}
- 自定义Comparator
public class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
if (s1.getScoreList() != null && s2.getScoreList() == null) {
return -1;
} else if (s1.getScoreList() == null && s2.getScoreList() != null) {
return 1;
}
return 0;
}
}
在 Java 中的 Comparator 接口中,有一个方法 compare(T o1, T o2) 用于比较两个对象的大小关系。返回值为 int 类型,具体含义如下:
如果 o1 小于 o2,则返回 -1;
如果 o1 大于 o2,则返回 1;
如果 o1 和 o2 相等,则返回 0。
因此,如果返回值为 -1,则表示 o1 小于 o2。
两个student对象分别是s1、s2 ,如果s1的分数列表scoreList不为null,s2的分数列表scoreList为空 ,则定义s1 小于 s2
- 定义对象列表实现排序
public static void main(String[] args) {
List<Student> studentList = new ArrayList<>();
List<Integer> scoreList = new ArrayList<>();
scoreList.add(1);
scoreList.add(2);
scoreList.add(3);
Student student = new Student();
student.setName("ziyuan");
student.setSex("F");
student.setScoreList(scoreList);
studentList.add(student);
student = new Student();
student.setName("ziyuan2");
studentList.add(student);
student = new Student();
student.setName("ziyuan3");
studentList.add(student);
student = new Student();
student.setName("ziyuan4");
student.setSex("M");
student.setScoreList(scoreList);
studentList.add(student);
System.out.println(studentList.toString());
studentList = studentList.stream().sorted(new StudentComparator()).collect(Collectors.toList());
System.out.println(studentList.toString());
}
sort 是升序排序 ,所以实现分数列表不为null的学生对象排在前面
- 运行结果
关于sort方法的具体使用,可以参照我的另一篇博客:
原文地址:https://blog.csdn.net/qq_15283475/article/details/136151879
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!