Java 8 Lamba表达式使用比较器
时间:2020-02-23 14:34:53 来源:igfitidea点击:
Java 8使用Lambda表达式更强大的比较器。
它为比较器推出了许多新的API。
让我们通过Lambda表达式来通过比较器的一些新功能.Let的创建一个称为员工的非常简单的类:
package org.igi.theitroad; public class Employee { private String employeeName; private int age; public Employee(String employeeName,int age) { this.employeeName=employeeName; this.age=age; } public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName= employeeName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return getEmployeeName()+" : "+getAge(); } }
以经典方式按名称排序员工列表:
我们将以经典的方式对员工列表进行排序
Collections.sort(employeeList,new Comparator() { public int compare(Employee e1,Employee e2) { return e1.getEmployeeName().compareTo(e2.getEmployeeName()); } });
创造 EmployeeMain.java
package org.igi.theitroad; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class EmployeeMain { public static void main(String[] args) { List employeeList=getEmployees(); System.out.println("Before Sorting: "); System.out.println(employeeList); //in classic way Collections.sort(employeeList,new Comparator() { public int compare(Employee e1,Employee e2) { return e1.getEmployeeName().compareTo(e2.getEmployeeName()); } }); System.out.println("After Sorting: "); System.out.println(employeeList); } public static List getEmployees() { List employeesList=new ArrayList(); Employee e1=new Employee("John", 35); Employee e2=new Employee("Adam", 22); Employee e3=new Employee("igi", 28); Employee e4=new Employee("John", 30); Employee e5=new Employee("Grace", 38); Employee e6=new Employee("igi", 25); employeesList.add(e1); employeesList.add(e2); employeesList.add(e3); employeesList.add(e4); employeesList.add(e5); employeesList.add(e6); return employeesList; } }
使用lambda表达式按名称排序员工列表:
我们将按照Lambda表达式对员工列表进行排序,将复杂的比较器语法减少到简单的代码创建 EmployeeMain.java
package org.igi.theitroad; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class EmployeeMain { public static void main(String[] args) { List employeeList=getEmployees(); System.out.println("Before Sorting: "); System.out.println(employeeList); //using lambda expression Collections.sort(employeeList,(Employee e1,Employee e2)->e1.getEmployeeName().compareTo(e2.getEmployeeName())); System.out.println("After Sorting: "); System.out.println(employeeList); } public static List getEmployees() { List employeesList=new ArrayList(); Employee e1=new Employee("John", 35); Employee e2=new Employee("Adam", 22); Employee e3=new Employee("igi", 28); Employee e4=new Employee("John", 30); Employee e5=new Employee("Grace", 38); Employee e6=new Employee("igi", 25); employeesList.add(e1); employeesList.add(e2); employeesList.add(e3); employeesList.add(e4); employeesList.add(e5); employeesList.add(e6); return employeesList; } }
运行上述程序,我们将获取以下输出:
Before Sorting: [John : 35, Adam : 22, igi : 28, John : 30, Grace : 38, igi : 25] After Sorting: [Adam : 22, igi : 28, igi : 25, Grace : 38, John : 35, John : 30]]
使用没有类型定义的Lambda表达式对员工列表进行排序
其中我们不会将类型定义传递给lambda表达式中的参数。
它将被解释在上下文中
值需要修改16行中 Employee 名称:
将
Collections.sort(employeeList,(Employee e1,Employee e2)->e1.getEmployeeName().compareTo(e2.getEmployeeName()));
改成
Collections.sort(employeeList,(e1,e2)->e1.getEmployeeName().compareTo(e2.getEmployeeName()));
反向排序:
要反转列表, 只要修改参数的顺序
将员工主要方法更改为以下方法:
public static void main(String[] args) { List employeeList=getEmployees(); System.out.println("Before Sorting: "); System.out.println(employeeList); //using lambda expression Collections.sort(employeeList,(e1,e2)->e2.getEmployeeName().compareTo(e1.getEmployeeName())); System.out.println("After Sorting: "); System.out.println(employeeList); }