list集合根据某字段进行排序

1、Collections.sort()

//升序排列
Collections.sort(list, new Comparator<Student>() {
    public int compare(Student s1, Student s2) {
        return s1.getAge().compareTo(s2.getAge());
    }
});
//降序排列
Collections.sort(list, new Comparator<Student>() {
    public int compare(Student s1, Student s2) {
        return s2.getAge().compareTo(s1.getAge());
    }
});
复制代码
//多条件-先年龄升序、后分数升序
Collections.sort(list, new Comparator<Student>() {
    public int compare(Student s1, Student s2) {
        int i = s1.getAge().compareTo(s2.getAge());
        if(i == 0) {
            i = s1.getScore().compareTo(s2.getScore());
        }
        return i;
    }
});
复制代码
//如日期集合List<Date> list = new ArrayList<>();
Collections.sort(list, new Comparator<Date>() {
    public int compare(Date s1, Date s2) {
        return s1.compareTo(s2);
    }
});

 

java8可使用

2、list.sort()

//升序排列
list.sort((x,y)->Integer.compare(x.getAge(), y.getAge()));
//降序排列
list.sort((x,y)->Integer.compare(y.getAge(), x.getAge()));
//如日期集合List<Date> list = new ArrayList<>();
list.sort((x,y)->x.compareTo(y));

3、list.stream()

 

复制代码
//升序排列
list = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
list = list.stream().sorted(Comparator.comparingInt(Student::getAge)).collect(Collectors.toList());
//使用lambda表达式
list = list.stream().sorted(Comparator.comparing(e -> e.getAge())).collect(Collectors.toList());
//降序排列
list = list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());
//多条件-先年龄升序、后分数升序3、list.stream()
list = list.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Comparator.comparing(Student::getScore))).collect(Collectors.toList());
复制代码

 

4、多字段排序

 

多个字段的排序

Comparator<对象的类名> comparator = Comparator.comparing(对象的类名::方法名1, 升序或降序).thenComparing(对象的类名::方法名2, 升序或降序));

如果是三个以上的字段排序,就继续使用 thenComparing 连接

//多条件-先年龄升序、后分数升序
list = list.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Comparator.comparing(Student::getScore))).collect(Collectors.toList());

//或者用下面的方法
Comparator<Order> comparator = Comparator.comparing(Order::getAge).thenComparing(Order::getScore, Comparator.nullsLast(Comparator.reverseOrder()));
List<Order> list2 = list.parallelStream().sorted(comparator).collect(Collectors.toList());

 

posted @   chelsey3tsf  阅读(1007)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示