java 8 lambda 排序_Java8:利用Lambda表达式、方法引用以及增强版Comparator对List进行排序...

本文主要是利用java8来对List进行排序:

通过举例进行讲解,首先创建一个简单实例: public class Student implements Comparable{ private String name; private Integer age; private Float score; public Student() { } public Student(String name, Integer age, Float score) { this.name = name; this.age = age; this.score = score; } 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 Float getScore() { return score; } public void setScore(Float score) { this.score = score; } @Override public int compareTo(Student o) { return this.getScore().compareTo(o.getScore()); } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", score=" + score + '}'; } }

添加几个测试数据: List students = new ArrayList<>(); Student xiaoming = new Student("小明", 13, 186.5f); Student xiaoxi = new Student("小茜", 14, 191f); Student xiaoyi = new Student("小艺", 12, 188.5f); Student xiaolan = new Student("小兰", 15, 188.5f); students.add(xiaoming); students.add(xiaoxi); students.add(xiaoyi); students.add(xiaolan);

1.由于Student类实现了Comparable接口,因此可以直接使用 Collections.sort(students); 或 students.sort(Student::compareTo);

2. 可以使用匿名内部类进行排序 Collections.sort(students, new Comparator() { @Override public int compare(Student o1, Student o2) { return o1.getScore().compareTo(o2.getScore()); } }); 或 students.sort(new Comparator() { @Override public int compare(Student o1, Student o2) { return o1.getScore().compareTo(o2.getScore()); } });

3.使用Lambda表达式进行排序 Collections.sort(students, (x, y) -> x.getScore().compareTo(y.getScore()));

4.使用Comparator.comparing方法

我们使用上述lambda表达式的时候,IDE会提示我们:can be replaced with comparator.comparing Collections.sort(students, Comparator.comparing(Student::getScore));

5.使用方法引用排序(我们创建Student的时候实现了compareTo方法) students.sort(Student::compareTo);

我们还可以很方便的进行反转排序 Comparator comparator = Comparator.comparing(Student::getScore); students.sort(comparator.reversed());

多条件排序,先根据分数,分数相等时再根据名字排序 students.sort((x,y)->{ if(x.getScore().equals(y.getScore())){ return x.getName().compareTo(y.getName()); }else { return x.getScore().compareTo(y.getScore()); } });

或多条件组合排序 students.sort(Comparator.comparing(Student::getScore).thenComparing(Student::getName)); 或 Collections.sort(students,Comparator.comparing(Student::getScore).thenComparing(Student::getName));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值