Java 8 Lambda : Comparator 示例
来源:互联网 发布:ubuntu常用命令 编辑:程序博客网 时间:2024/06/06 00:18
Java 8 Lambda : Comparator 示例
JDK8发布都三年多了,JDK9都快要出了,才去学习java8的我是不是有点晚了~ 在这留下学习的经验,主要以代码为准,实际的理论其实可以去看官方的更加详细。
在这个例子中,将向您展示如何使用Java 8 Lambda表达式来编写Comparator
一个列表。
经典Comparator
例子
Comparator<Developer> byName = new Comparator<Developer>() {@Overridepublic 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
使用年龄的对象的示例。通常,你使用Collections.sort
并传递一个这样的匿名Comparator
类:
TestSorting.java
package com.mkyong.java8;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;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);}//sort by ageCollections.sort(listDevs, new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getAge() - o2.getAge();}});System.out.println("After Sort");for (Developer developer : listDevs) {System.out.println(developer);}}private static List<Developer> getDevelopers() {List<Developer> result = new ArrayList<Developer>();result.add(new Developer("mkyong", new BigDecimal("70000"), 33));result.add(new Developer("alvin", new BigDecimal("80000"), 20));result.add(new Developer("jason", new BigDecimal("100000"), 10));result.add(new Developer("iris", new BigDecimal("170000"), 55));return result;}}
OutputBefore SortDeveloper [name=mkyong, salary=70000, age=33]Developer [name=alvin, salary=80000, age=20]Developer [name=jason, salary=100000, age=10]Developer [name=iris, salary=170000, age=55]After SortDeveloper [name=jason, salary=100000, age=10]Developer [name=alvin, salary=80000, age=20]Developer [name=mkyong, salary=70000, age=33]Developer [name=iris, salary=170000, age=55]
当排序要求更改时,您只需传递另一个新的匿名Comparator
类://sort by ageCollections.sort(listDevs, new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getAge() - o2.getAge();}});//sort by nameCollections.sort(listDevs, new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getName().compareTo(o2.getName());}});//sort by salaryCollections.sort(listDevs, new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getSalary().compareTo(o2.getSalary());}});
JDK8之前的写法,Lambda表达式 将焕然一新。2.用Lambda排序
在Java 8中,List
界面sort
直接支持该方法,不再需要使用Collections.sort
了。
//List.sort() since Java 8listDevs.sort(new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o2.getAge() - o1.getAge();}});
Lambda表达式示例:
TestSorting.java
package com.mkyong.java8;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;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);}System.out.println("After Sort");//lambda here!listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());//java 8 only, lambda also, to print the ListlistDevs.forEach((developer)->System.out.println(developer));}private static List<Developer> getDevelopers() {List<Developer> result = new ArrayList<Developer>();result.add(new Developer("mkyong", new BigDecimal("70000"), 33));result.add(new Developer("alvin", new BigDecimal("80000"), 20));result.add(new Developer("jason", new BigDecimal("100000"), 10));result.add(new Developer("iris", new BigDecimal("170000"), 55));return result;}}
OutputBefore SortDeveloper [name=mkyong, salary=70000, age=33]Developer [name=alvin, salary=80000, age=20]Developer [name=jason, salary=100000, age=10]Developer [name=iris, salary=170000, age=55]After SortDeveloper [name=jason, salary=100000, age=10]Developer [name=alvin, salary=80000, age=20]Developer [name=mkyong, salary=70000, age=33]Developer [name=iris, salary=170000, age=55]
3.更多Lambda的例子
3.1按年龄排序
//sort by ageCollections.sort(listDevs, new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getAge() - o2.getAge();}});//lambdalistDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());//lambda, valid, parameter type is optionallistDevs.sort((o1, o2)->o1.getAge()-o2.getAge());
3.2按名称排序//sort by nameCollections.sort(listDevs, new Comparator<Developer>() {@Overridepublic int compare(Developer o1, Developer o2) {return o1.getName().compareTo(o2.getName());}});//lambdalistDevs.sort((Developer o1, Developer o2)->o1.getName().compareTo(o2.getName()));//lambda 此处由编译器推算出类型,可以不写参数类型listDevs.sort((o1, o2)->o1.getName().compareTo(o2.getName()));
3.4倒序
3.4.1使用他们的工资对列表排序的Lambda表达式。
Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());listDevs.sort(salaryComparator);
Output
Developer [name=mkyong, salary=70000, age=33]Developer [name=alvin, salary=80000, age=20]Developer [name=jason, salary=100000, age=10]Developer [name=iris, salary=170000, age=55]
3.4.2使用Lambda表达式对列表进行排序,使用他们的工资,相反的顺序。
Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());listDevs.sort(salaryComparator.reversed());
Output
Developer [name=iris, salary=170000, age=55]Developer [name=jason, salary=100000, age=10]Developer [name=alvin, salary=80000, age=20]Developer [name=mkyong, salary=70000, age=33]
阅读全文
0 0
- Java 8 Lambda : Comparator 示例
- Java 8 Lambda : Comparator 示例
- Java 8 Lambda : Comparator 示例
- Java 8 Lambda : Comparator 例子
- java 8 comparator 使用lambda 表达式
- Java 8 lambda表达式示例
- Java 8 lambda表达式示例
- java Lambda表达式Comparator和sort
- java.util.Comparator使用示例
- java.util.Comparator使用示例
- Java中Comparator的示例
- java lambda表达式示例
- Java Comparator和Comparable介绍与示例
- Java8:Lambda-Comparator
- Java之Lambda表达式10个示例
- 再谈Comparator-使用lambda表达式
- Lambda在Comparator中的应用
- Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例
- 【牛客网】2017年6月16日秋招第二模拟 编程题3--最和谐身高队
- 使用CMake搭建OpenCV开发环境
- python 爬取网页中的图片到本地
- 递推,递归及其优化
- Swift之自定义UIView
- Java 8 Lambda : Comparator 示例
- python基础学习笔记
- QT总结之线程
- linux常用命令及操作
- 使用JS写一个计算器练习
- PHP发送邮箱激活验证
- 解决Error inflating class android.support.design.widget.FloatingActionButton
- 分析知识,解决问题,设计方案
- Codeforces 241D : Numbers