当前位置:   article > 正文

java list排序的三种方式_java list.sort

java list.sort
  1. //实体类 如果自定义比较器可以不实现Comparable接口
  2. public class User implements Comparable<User>{
  3. private String name;
  4. private Integer age;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public Integer getAge() {
  12. return age;
  13. }
  14. public void setAge(Integer age) {
  15. this.age = age;
  16. }
  17. @Override
  18. public String toString() {
  19. return "User{" +"name='" + name + '\'' +", age=" + age +'}';
  20. }
  21. @Override
  22. public int compareTo(User user) {
  23. return this.age-user.age;
  24. }
  25. }

1.使用 Collections 工具类中的 sort() 方法( list是空集合不会报错,如果是null回报npe)

  参数不同: Collections.sort(List list) 在自定义类User里面实现Comparable<User>接口,并重写抽象方法compareTo(Student o);    //基本不用

                          Collections.sort(List list, Comparator c) 第二个参数为了省事,可以直接使用匿名内部类

  1. public static void main(String[] args) {
  2. User user1 = new User();
  3. user1.setName("a");
  4. user1.setAge(211);
  5. User user2 = new User();
  6. user2.setName("b");
  7. user2.setAge(985);
  8. User user3 = new User();
  9. user3.setName("c");
  10. user3.setAge(666);
  11. User user4 = new User();
  12. user4.setName("d");
  13. user4.setAge(985);
  14. List<User> userList = Arrays.asList(user1,user2,user3,user4);
  15. System.out.println(userList);
  16. String myName="e";
  17. Collections.sort(userList);
  18. // 使用 Comparator 自定义排序规则
  19. Collections.sort(userList, Comparator.nullsLast(Comparator.naturalOrder()));
  20. Collections.sort(userList, new Comparator<User>() {
  21. @Override
  22. public int compare(User o1, User o2) {
  23. //o1是后面的元素 o2是前面的元素
  24. //指定值排在第一位(比如我的成绩)
  25. if(myName.equals(o1.getName())){
  26. return -1;
  27. }
  28. //如果年纪不相等直接大的年纪在后
  29. if(o1.getAge()-o2.getAge()!=0){
  30. return o1.getAge()-o2.getAge();
  31. }
  32. return o1.getName().compareTo(o2.getName());
  33. }
  34. });
  35. System.out.println(userList);
  36. }

     2.使用list本身的sort方法 

java8使用 Comparator.comparing 进行多字段排序

  1. //studentsList本身元素会改变
  2. userList.sort(Comparator.comparing(User::getAge).reversed());
  3. userList.sort(new Comparator<User>() {
  4. @Override
  5. public int compare(User o1, User o2) {
  6. return o1.getAge() - o2.getAge()!=0?o1.getAge() - o2.getAge():o1.getName().compareTo(o2.getName());
  7. }
  8. });
  9. //studentsList作为数据源,本身元素不会改变
  10. List<User> studentsList= userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
  11. //按照名称主排序;年龄副排序
  12. List<User> studentsList1 = userList.stream().sorted(Comparator.comparing(User::getName).thenComparing(
  13. User::getAge, (s1, s2) -> {
  14. return (s1 < s2) ? 1 : ((s1.intValue()== s2.intValue()) ? 0 : -1);
  15. })).collect(Collectors.toList());

另一文章: java list排序的两种方式(实现Comparable接口和Collections.sort重载方法)_qq_31459039的博客-CSDN博客_list实现comparable

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/784131
推荐阅读
相关标签
  

闽ICP备14008679号