Java 8 Lambda 表达式比较器使用示例代码
引言
在这个例子中,我们将向您展示如何使用 java8lambda表达式编写一个 Comparator来对List进行排序。
经典的比较器示例:
ComparatorbyName=newComparator (){ @Override publicintcompare(Developero1,Developero2){ returno1.getName().compareTo(o2.getName()); } };
使用lambda:
ComparatorbyName= (Developero1,Developero2)->o1.getName().compareTo(o2.getName());
1.没有Lambda的排序
先新建一个Developer类,然后比较Developer对象的年龄,通常我们使用Collections.sort并传递匿名Comparator类,如下所示:
packagecom.jimzhang.lambda; importjava.math.BigDecimal; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Comparator; importjava.util.List; /** *〈一句话功能简述〉
〈排序〉 * *@authorzhangjinmiao *@create2019/8/410:19 */ publicclassTestSorting{ publicstaticvoidmain(String[]args){ ListlistDevs=getDevelopers(); System.out.println("BeforeSort"); for(Developerdeveloper:listDevs){ System.out.println(developer.toString()); } //sortbyage Collections.sort(listDevs,newComparator (){ @Override publicintcompare(Developero1,Developero2){ returno1.getAge()-o2.getAge(); } }); System.out.println("AfterSort"); for(Developerdeveloper:listDevs){ System.out.println(developer); } } publicstaticList getDevelopers(){ List developers=newArrayList<>(); developers.add(newDeveloper("lisi",newBigDecimal("8000"),23)); developers.add(newDeveloper("wangwu",newBigDecimal("9000"),24)); developers.add(newDeveloper("maliu",newBigDecimal("10000"),25)); developers.add(newDeveloper("zhangsan",newBigDecimal("7000"),22)); returndevelopers; } }
当排序要求改变时,您只需传入另一个新的匿名Comparator类:
//sortbyage Collections.sort(listDevs,newComparator(){ @Override publicintcompare(Developero1,Developero2){ returno1.getAge()-o2.getAge(); } }); //sortbyname Collections.sort(listDevs,newComparator (){ @Override publicintcompare(Developero1,Developero2){ returno1.getName().compareTo(o2.getName()); } }); //sortbysalary Collections.sort(listDevs,newComparator (){ @Override publicintcompare(Developero1,Developero2){ returno1.getSalary().compareTo(o2.getSalary()); } });
这是可行的,但是,您是否觉得仅仅因为想要更改一行代码就创建一个类有点奇怪?
2.使用Lambda排序
在Java8中,List接口直接支持排序方法,不再需要使用Collections.sort。
//List.sort()sinceJava8 listDevs.sort(newComparator(){ @Override publicintcompare(Developero1,Developero2){ returno2.getAge()-o1.getAge(); } });
3.更多例子
1.按年龄排序
//sortbyage Collections.sort(listDevs,newComparator(){ @Override publicintcompare(Developero1,Developero2){ returno1.getAge()-o2.getAge(); } }); //lambda listDevs.sort((Developero1,Developero2)->o1.getAge()-o2.getAge()); //lambda,valid,parametertypeisoptional listDevs.sort((o1,o2)->o1.getAge()-o2.getAge());
2.按名字排序
//sortbyname Collections.sort(listDevs,newComparator(){ @Override publicintcompare(Developero1,Developero2){ returno1.getName().compareTo(o2.getName()); } }); //lambda listDevs.sort((Developero1,Developero2)->o1.getName().compareTo(o2.getName())); //lambda listDevs.sort((o1,o2)->o1.getName().compareTo(o2.getName()));
3.按薪水排序
//sortbysalary Collections.sort(listDevs,newComparator(){ @Override publicintcompare(Developero1,Developero2){ returno1.getSalary().compareTo(o2.getSalary()); } }); //lambda listDevs.sort((Developero1,Developero2)->o1.getSalary().compareTo(o2.getSalary())); //lambda listDevs.sort((o1,o2)->o1.getSalary().compareTo(o2.getSalary()));
4.反向排序
薪水正序排序
ComparatorsalaryComparator=(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.反向排序
ComparatorsalaryComparator=(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}
总结
以上所述是小编给大家介绍的Java8Lambda表达式比较器使用示例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。