2022-05-17 589
@Data是lombok
import lombok.Data; @Data public class Student { /** 姓名 */ private String name; /** 年龄 */ private Integer age; /** 成绩 */ private Double score; /** 是否优秀学生 */ private Boolean merit; }
private static int getRandomAge() { Random random = new Random(); return random.nextInt(3) + 16; }
private static double getRandomScore() { Random random = new Random(); double a = random.nextDouble() * 100; DecimalFormat df = new DecimalFormat("0.00"); String str = df.format(a); return Double.parseDouble(str); }
private static boolean getRandomMerit() { Random random = new Random(); return random.nextBoolean(); }
private static List<Student> getStudentList() { List<Student> list = new ArrayList<>(); String name = "张"; for (int i = 1; i <= 5; i++) { Student student = new Student(); // 姓名拼接 student.setName(name + i); student.setAge(getRandomAge()); // 设置缺考成绩 if (i == 2 || i == 3) { student.setScore(null); } else { student.setScore(getRandomScore()); } student.setMerit(getRandomMerit()); list.add(student); } return list; }
假设没有缺考的学生,即学生都有成绩,都是随机生成的成绩不走if(i == 2 || i == 3)的判断
假设没有缺考的学生,即学生都有成绩,都是随机生成的成绩
不走if(i == 2 || i == 3)的判断
List<Student> studentList = getStudentList(); // 进行年龄排序-正序 studentList.sort(Comparator.comparingInt(Student::getAge)); // 排序-倒序 studentList.sort(Comparator.comparingInt(Student::getAge).reversed());
List<Student> studentList = getStudentList(); // 进行成绩排序-正序 studentList.sort(Comparator.comparingDouble(Student::getScore)); // 排序-倒序 studentList.sort(Comparator.comparingDouble(Student::getScore).reversed());
# 排序优秀学生,使用了Boolean中的compare,而非比较器 studentList.sort((o1, o2) -> Boolean.compare(o1.getMerit(), o2.getMerit())); # 排序学生名称-倒序,使用了通用的比较Comparator.comparing studentList.sort(Comparator.comparing(Student::getName).reversed());
studentList.sort(Comparator.comparingInt(Student::getAge).thenComparing(Comparator.comparingDouble(Student::getScore).reversed())); # 注意,下面这种跟上面是不同的结果,注意 studentList.sort(Comparator.comparingInt(Student::getAge).thenComparingDouble(Student::getScore).reversed());
// 排到最后 studentList.sort(Comparator.comparing(Student::getScore, Comparator.nullsLast(Double::compareTo))); // 排到最前 studentList.sort(Comparator.comparing(Student::getScore, Comparator.nullsFirst(Double::compareTo)));
所谓空对象,即student对象为nullstudentList.add(null);
所谓空对象,即student对象为null
studentList.add(null);
// 排到最后 studentList.sort(Comparator.nullsLast(Comparator.comparing(Student::getScore, Comparator.nullsFirst(Double::compareTo)))); // 排到最前 studentList.sort(Comparator.nullsFirst(Comparator.comparing(Student::getScore, Comparator.nullsFirst(Double::compareTo))));
翻转比较结果,正序变倒序
进行二次比较使用,即多个比较条件的
null值的对象或者null值的属性放在最前或者最后注意区分null对象和null值属性的不同用法
null值的对象或者null值的属性放在最前或者最后
注意区分null对象和null值属性的不同用法
正常使用的比较器
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。