时间:2021-05-20
引言
在这个例子中,我们将向您展示如何使用java8 lambda 表达式编写一个Comparator 来对 List 进行排序。
经典的比较器示例:
Comparator<Developer> byName = new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName()); } };使用 lambda:
Comparator<Developer> byName = (Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());1.没有 Lambda 的排序
先新建一个 Developer 类,然后比较 Developer 对象的年龄,通常我们使用 Collections.sort 并传递匿名 Comparator 类,如下所示:
package com.jimzhang.lambda;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;/** * 〈一句话功能简述〉<br> 〈排序〉 * * @author zhangjinmiao * @create 2019/8/4 10:19 */public class TestSorting { public static void main(String[] args) { List<Developer> listDevs = getDevelopers(); System.out.println("Before Sort"); for (Developer developer : listDevs) { System.out.println(developer.toString()); } //sort by age Collections.sort(listDevs, new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getAge() - o2.getAge(); } }); System.out.println("After Sort"); for (Developer developer : listDevs) { System.out.println(developer); } } public static List<Developer> getDevelopers() { List<Developer> developers = new ArrayList<>(); developers.add(new Developer("lisi", new BigDecimal("8000"),23)); developers.add(new Developer("wangwu", new BigDecimal("9000"),24)); developers.add(new Developer("maliu", new BigDecimal("10000"),25)); developers.add(new Developer("zhangsan", new BigDecimal("7000"),22)); return developers; }}当排序要求改变时,您只需传入另一个新的匿名 Comparator 类:
//sort by age Collections.sort(listDevs, new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getAge() - o2.getAge(); } }); //sort by name Collections.sort(listDevs, new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName()); } }); //sort by salary Collections.sort(listDevs, new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getSalary().compareTo(o2.getSalary()); } });这是可行的,但是,您是否觉得仅仅因为想要更改一行代码就创建一个类有点奇怪?
2.使用 Lambda 排序
在 Java 8 中,List 接口直接支持排序方法,不再需要使用 Collections.sort。
//List.sort() since Java 8 listDevs.sort(new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o2.getAge() - o1.getAge(); } });3.更多例子
1. 按年龄排序
//sort by age Collections.sort(listDevs, new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getAge() - o2.getAge(); } }); //lambda listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge()); //lambda, valid, parameter type is optional listDevs.sort((o1, o2)->o1.getAge()-o2.getAge());2. 按名字排序
//sort by name Collections.sort(listDevs, new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName()); } }); //lambda listDevs.sort((Developer o1, Developer o2)->o1.getName().compareTo(o2.getName())); //lambda listDevs.sort((o1, o2)->o1.getName().compareTo(o2.getName()));3. 按薪水排序
//sort by salary Collections.sort(listDevs, new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getSalary().compareTo(o2.getSalary()); } }); //lambda listDevs.sort((Developer o1, Developer o2)->o1.getSalary().compareTo(o2.getSalary())); //lambda listDevs.sort((o1, o2)->o1.getSalary().compareTo(o2.getSalary()));4. 反向排序
薪水正序排序
Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary()); listDevs.sort(salaryComparator);输出:
Developer{name='zhangsan', salary=7000, age=22}Developer{name='lisi', salary=8000, age=23}Developer{name='wangwu', salary=9000, age=24}Developer{name='maliu', salary=10000, age=25}2.反向排序
Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary()); listDevs.sort(salaryComparator.reversed());输出:
Developer{name='maliu', salary=10000, age=25}Developer{name='wangwu', salary=9000, age=24}Developer{name='lisi', salary=8000, age=23}Developer{name='zhangsan', salary=7000, age=22}总结
以上所述是小编给大家介绍的Java 8 Lambda 表达式比较器使用示例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
什么是Lambda表达式,java8为什么使用Lambda表达式?“Lambda表达式”(lambdaexpression)是一个匿名函数,Lambda表达式基
一、Lambda表达式简介Lambda表达式,是Java8的一个新特性,也是Java8中最值得学习的新特性之一。(另一个新特性是流式编程。)Lambda表达式,
java8引入了lambda表达式,lambda表达式实际上表示的就是一个匿名的function。在java8之前,如果需要使用到匿名function需要new
Java1.8提供了lambda表达式;lambda会使用()->代替匿名内部类,代码整体会更简介,一些人会觉得使用lambda表达式会降低代码可读性,其实对开
Java8引入了lambda表达式。lambda表达式并不是新功能,只是为了方便代码编写的语法糖。但,即便是在其他语言已经司空见惯的lambda表达式,如果在J