java list排序的三种方式

//实体类 如果自定义比较器可以不实现Comparable接口
public class User implements Comparable<User>{
        private String name;
        private Integer age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "User{" +"name='" + name + '\'' +", age=" + age +'}';
        }

        @Override
        public int compareTo(User user) {
            return this.age-user.age;
        }
    }

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

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

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

public static void main(String[] args) {
        User user1 = new User();
        user1.setName("a");
        user1.setAge(211);

        User user2 = new User();
        user2.setName("b");
        user2.setAge(985);

        User user3 = new User();
        user3.setName("c");
        user3.setAge(666);

        User user4 = new User();
        user4.setName("d");
        user4.setAge(985);
        List<User> userList = Arrays.asList(user1,user2,user3,user4);
        System.out.println(userList);
        String myName="e";

      
        Collections.sort(userList);
        // 使用 Comparator 自定义排序规则
        Collections.sort(userList, Comparator.nullsLast(Comparator.naturalOrder()));

        Collections.sort(userList, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                //o1是后面的元素  o2是前面的元素

                //指定值排在第一位(比如我的成绩)
                if(myName.equals(o1.getName())){
                    return -1;
                }

                //如果年纪不相等直接大的年纪在后
                if(o1.getAge()-o2.getAge()!=0){
                    return o1.getAge()-o2.getAge();
                }
                return o1.getName().compareTo(o2.getName());
            }
        });
        System.out.println(userList);
    }

     2.使用list本身的sort方法 

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

        //studentsList本身元素会改变
        userList.sort(Comparator.comparing(User::getAge).reversed());

        userList.sort(new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                return o1.getAge() - o2.getAge()!=0?o1.getAge() - o2.getAge():o1.getName().compareTo(o2.getName());
            }
        });

        //studentsList作为数据源,本身元素不会改变
        List<User> studentsList= userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());

        //按照名称主排序;年龄副排序
        List<User> studentsList1 = userList.stream().sorted(Comparator.comparing(User::getName).thenComparing(
                User::getAge, (s1, s2) -> {
                    return (s1 < s2) ? 1 : ((s1.intValue()== s2.intValue()) ? 0 : -1);
                })).collect(Collectors.toList());

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,可以使用Collections类的sort方法对List进行排序。引用\[1\]中的代码展示了如何使用Collections.sort方法对一个包含整数的List进行排序。首先,创建一个ArrayList对象,并向其中添加整数元素。然后,使用Collections.sort方法对该List进行排序。最后,打印排序后的List。这种方法适用于简单的整数排序。 如果要对自定义对象进行排序,可以实现Comparable接口或使用Comparator接口。引用\[2\]中的代码展示了如何对一个包含自定义对象的List进行排序。首先,创建一个ArrayList对象,并向其中添加自定义对象。然后,使用Collections.sort方法对该List进行排序。最后,打印排序后的List。在这个例子中,自定义对象实现了Comparable接口,因此可以直接使用Collections.sort方法进行排序。 另一种方法是使用Listsort方法和Comparator接口。引用\[3\]中的代码展示了如何使用Listsort方法和Comparator接口对一个包含自定义对象的List进行排序。首先,创建一个ArrayList对象,并向其中添加自定义对象。然后,使用Listsort方法和Comparator.comparing方法对该List进行排序。最后,打印排序后的List。这种方法更简洁,只需要一行代码即可完成排序。 综上所述,可以根据需要选择合适的方法对Java中的List进行排序。 #### 引用[.reference_title] - *1* *3* [Java List排序的几种方式整理](https://blog.csdn.net/Wjhsmart/article/details/115935693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java:详解List集合的排序功能](https://blog.csdn.net/weixin_43092673/article/details/123910945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值