Java8 List<Bean> sorted()排序

Java8 ListBean sorted() 排序

Java8 排序使用: stream.sorted(Comparator.comparing)

对于List<Bean>类型的排序,会好处理些,罗列常见的排序情况,直接看代码:

代码;

User

public class User {
    private String name;
    private Integer age;
    private Integer credits;
    private double money;

    public User(String name, Integer age, Integer credits, double money) {
        this.name = name;
        this.age = age;
        this.credits = credits;
        this.money = money;
    }

    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;
    }

    public Integer getCredits() {
        return credits;
    }

    public void setCredits(Integer credits) {
        this.credits = credits;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

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

常见排序

public static void main(String args[]) {
    testBeanSorted();
}

public static void testBeanSorted() {
    List<User> users = Lists.newArrayList(new User("jack", 17, 10, 1.98),
            new User("jenny", 18, 10, 3.35),
            new User("mock", 19, 11, 1.52),
            new User("odd", 25, 15, 11.78),
            new User("tommy", 23, 8, 6.80),
            new User("jessica", 15, 13, 2.62));

    List<User> ageList = users.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
    ageList.forEach(System.out::println);

    List<User> reverseAgeList = users.stream().sorted(Comparator.comparingInt(User::getAge).reversed())
            .collect(Collectors.toList());
    System.out.println("==========倒序排序===========");
    reverseAgeList.forEach(System.out::println);

    List<User> sortAgainList = users.stream().sorted(Comparator.comparing(User::getName).reversed()
            .thenComparing(User::getAge).thenComparing(User::getMoney)).collect(Collectors.toList());
    System.out.println("==========先排年龄,后根据钱排===========");
    sortAgainList.forEach(System.out::println);
}

处理null的情况

如果排序中,值为null了,要怎么处理呢? 看Comparator里面的方法,会找到答案。

public static void main(String args[]) {
    testBeanWithNullSorted();
}

public static void testBeanWithNullSorted() {
    List<User> users = Lists.newArrayList(new User("jack", 17, 10, 1.98),
            new User("jenny", 18, 10, 3.35),
            new User("mock", 19, 11, 1.52),
            new User("odd", null, 15, 11.78),
            new User("tommy", null, 8, 6.80),
            new User("jessica", 15, 13, 2.62));

    List<User> filterAgeList = users.stream().filter(e -> e.getAge() != null).sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
    System.out.println("==========过滤null===========");
    filterAgeList.forEach(System.out::println);

    List<User> ageNullFirstList = users.stream().sorted(Comparator.comparing(User::getAge,Comparator.nullsFirst(Integer::compareTo))).collect(Collectors.toList());
    System.out.println("==========null排前面===========");
    ageNullFirstList.forEach(System.out::println);

    List<User> ageNullLastList = users.stream().sorted(Comparator.comparing(User::getAge,Comparator.nullsLast(Integer::compareTo)))
            .collect(Collectors.toList());
    System.out.println("==========null排后面===========");
    ageNullLastList.forEach(System.out::println);
}

总结:

    在实际中,经常会遇到值为null的情况,过滤的话不合适;少数null的情况,考虑排后面,反之排前面。Bean处理排序会方便些,如果是List<Map>类型呢? 会有什么区别?

   关联文章: sorted排序》" data-link-title="《Listsorted排序》">《List<Map> sorted排序》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值