Java 中 List 集合排序方法

快来打我* 2024-03-23 23:19 160阅读 0赞

方式一: 调用List接口自己的sort方法排序

  1. public static void main(String[] args) {
  2. List<Integer> numList=new ArrayList<>();
  3. numList.add(999);
  4. numList.add(123);
  5. numList.add(456);
  6. numList.add(66);
  7. numList.add(9);
  8. Collections.sort(numList); //使用Collections类的方法排序
  9. numList.sort(new Comparator<Integer>() {//使用List接口的方法排序
  10. @Override
  11. public int compare(Integer o1, Integer o2) {
  12. return o1.compareTo(o2);
  13. }
  14. });
  15. //lambda表达式实现List接口sort方法排序
  16. numList.sort((num1,num2)->{return num1.compareTo(num2);});
  17. System.out.println(numList);
  18. }

方式二:使用java.util.Collections类的sort(List list)方法

  1. public static void main(String[] args) {
  2. List<User> numList=new ArrayList<>();
  3. User u=new User();
  4. u.setAge(12);
  5. numList.add(u);
  6. User u1=new User();
  7. u1.setAge(34);
  8. numList.add(u1);
  9. User u2=new User();
  10. u2.setAge(6);
  11. numList.add(u2);
  12. User u3=new User();
  13. u3.setAge(99);
  14. numList.add(u3);
  15. //Collections类的sort方法对对象集合排序,要传集合和Comparator接口两个参数
  16. Collections.sort(numList, new Comparator<User>() {
  17. @Override
  18. public int compare(User o1, User o2) {
  19. Integer age1= o1.getAge();
  20. Integer age2= o2.getAge();
  21. return age1.compareTo(age2);
  22. }
  23. });
  24. //List接口自身的sort方法对对象集合排序,重写Comparator接口方法即可
  25. numList.sort(new Comparator<User>() {
  26. @Override
  27. public int compare(User u1, User u2) {
  28. Integer age1= u1.getAge();
  29. Integer age2= u2.getAge();
  30. return age1.compareTo(age2);
  31. }
  32. });
  33. //List接口的sort方法,lambda表达式写法
  34. numList.sort((u4,u5)->{
  35. Integer age1= u4.getAge();
  36. Integer age2= u5.getAge();
  37. return age1.compareTo(age2);
  38. });
  39. System.out.println(numList);
  40. }

注:Collections的sort方法其实是调用了List接口自己的sort方法。

方式三:使用Stream流的sort方法

  1. 首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。
  2. 使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。
  3. Comparator.comparing()里面的内容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword
  4. 最后格式化为需要的格式 List 是.collect(Collectors.toList()) , Map是.collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))

1. 单字段排序

  1. 根据年龄倒序排
  2. public static void main(String[] args) {
  3. List<User> numList=new ArrayList<>();
  4. User u=new User();
  5. u.setAge(12);
  6. numList.add(u);
  7. User u1=new User();
  8. u1.setAge(34);
  9. numList.add(u1);
  10. User u2=new User();
  11. u2.setAge(6);
  12. numList.add(u2);
  13. User u3=new User();
  14. u3.setAge(99);
  15. numList.add(u3);
  16. numList = numList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
  17. }

2. 多字段排序

  1. 先对学生的班级做排序,然后同班级做倒序
  2. public static void main(String[] args) {
  3. List<User> numList=new ArrayList<>();
  4. User u=new User();
  5. u.setClass(1);
  6. u.setAge(12);
  7. numList.add(u);
  8. User u1=new User();
  9. u.setClass(1);
  10. u1.setAge(34);
  11. numList.add(u1);
  12. User u2=new User();
  13. u.setClass(2);
  14. u2.setAge(6);
  15. numList.add(u2);
  16. User u3=new User();
  17. u.setClass(2);
  18. u3.setAge(99);
  19. numList.add(u3);
  20. numList = numList.parallelStream().sorted(
  21. Comparator.comparing(User::getClass).reversed().thenComparing(User::getAge)
  22. ).collect(Collectors.toList());
  23. }

3. nullsFirst 排序

当集合中存在null元素时,可以使用针对null友好的比较器,null元素排在集合的最前面

  1. public static void main(String[] args) {
  2. List<User> numList=new ArrayList<>();
  3. User u=new User();
  4. u.setClass(1);
  5. u.setAge(12);
  6. numList.add(u);
  7. User u1=new User();
  8. u.setClass(1);
  9. u1.setAge(34);
  10. numList.add(u1);
  11. User u2=new User();
  12. u.setClass(2);
  13. u2.setAge(6);
  14. numList.add(u2);
  15. User u3=new User();
  16. u.setClass(2);
  17. u3.setAge(99);
  18. numList.add(u3);
  19. numList = numList.parallelStream().sorted(
  20. Comparator.nullsFirst(User::getClass).reversed().thenComparing(User::getAge)
  21. ).collect(Collectors.toList());
  22. }

发表评论

表情:
评论列表 (有 0 条评论,160人围观)

还没有评论,来说两句吧...

相关阅读

    相关 List集合排序

    Java中集合排序,在Java8之前,可以通过 Collections类的sort方法进行排序;Java8之后,新增 lambda和stream ,都增加了相关的排序方法,本文