Lambda表达式的优势
Lambda表达式的优势
1. 匿名内部类和Lambda的对比
//原来的匿名内部类
@Test
public void test1(){
Comparator comparator = new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
};
TreeSet ts = new TreeSet<>(comparator);
}
//Lambda表达式
@Test
public void test2(){
Comparator comparator = (x ,y) -> Integer.compare(x, y);
TreeSet ts = new TreeSet<>(comparator);
}
2. 用Lambda表达式优化代码
- 需求1:获取当前公司中员工年龄大于35的员工信息
需求2:获取当前公司中员工工资大于5000的员工信息
十年的东丽网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整东丽建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“东丽网站设计”,“东丽网站推广”以来,每个客户项目都认真落实执行。
public class Employee { private String name; private int age; private double salary; public Employee() { super(); } public Employee(String name, int age, double salary) { super(); this.name = name; this.age = age; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}'; } }
List
employees = Arrays.asList( new Employee("张三", 18 ,9999.99), new Employee("李四", 38, 5555.99), new Employee("王五", 50, 6666.66), new Employee("赵六", 16, 3333.33), new Employee("田七", 8, 7777.77) ); 实现方式
@Test public void test3(){ //获取年龄大于35岁的员工信息 List
employeeList = filterEmployee(employees); System.out.println("年龄大于35岁的员工信息:"); for (Employee employee : employeeList){ System.out.println(employee); } //获取当前公司中员工工资大于5000的员工信息 List employeeList1 = filterEmployees2(employees); System.out.println("工资大于5000的员工信息:"); for (Employee employee : employeeList1){ System.out.println(employee); } } 获取当前公司中员工年龄大于35的员工信息 public List filterEmployee(List employeeList){ List emps = new ArrayList<>(); for (Employee emp : employeeList){ if (emp.getAge() >= 35){ emps.add(emp); } } return emps; } 获取当前公司中员工工资大于5000的员工信息 public List filterEmployees2(List employeeList){ ArrayList employees = new ArrayList<>(); for (Employee employee : employeeList){ if (employee.getSalary() >= 5000){ employees.add(employee); } } return employees; } 优化方案一:策略设计模式
public interface MyPredicate
{ public boolean test(T t); } public class FilterEmployeeByAge implements MyPredicate
{ @Override public boolean test(Employee employee) { return employee.getAge() >= 35; } } public class FilterEmployeeBySalary implements MyPredicate
{ @Override public boolean test(Employee employee) { return employee.getSalary() >= 5000; } } @Test public void test4(){ List
employeeList = filterEmployee(employees, new FilterEmployeeByAge()); System.out.println("年龄大于35岁的员工信息:"); for (Employee employee : employeeList){ System.out.println(employee); } System.out.println("工资大于5000的员工信息:"); List employeeList1 = filterEmployee(this.employees, new FilterEmployeeBySalary()); for (Employee employee : employeeList1){ System.out.println(employee); } } public List filterEmployee(List employeeList, MyPredicate mp){ ArrayList employees = new ArrayList<>(); for (Employee employee : employeeList){ if (mp.test(employee)){ employees.add(employee); } } return employees; } 优化方案二:匿名内部类
public interface MyPredicate
{ public boolean test(T t); } @Test public void test5(){ List
employeeList = filterEmployee(employees, new MyPredicate () { @Override public boolean test(Employee employee) { return employee.getAge() >= 35; } }); System.out.println("年龄大于35岁的员工信息:"); for (Employee employee : employeeList){ System.out.println(employee); } List employeeList1 = filterEmployee(employees, new MyPredicate () { @Override public boolean test(Employee employee) { return employee.getSalary() >= 5000; } }); System.out.println("工资大于5000的员工信息:"); for (Employee employee : employeeList1){ System.out.println(employee); } } 优化方案三:Lambda表达式
public List
filterEmployee(List employeeList, MyPredicate mp){ ArrayList employees = new ArrayList<>(); for (Employee employee : employeeList){ if (mp.test(employee)){ employees.add(employee); } } return employees; } @Test public void test6(){ System.out.println("年龄大于35岁的员工信息:"); List
employeeList = filterEmployee(employees, (e) -> e.getAge() >= 35); employeeList.forEach(System.out::println); System.out.println("工资大于5000的员工信息:"); List employeeList1 = filterEmployee(employees, (e) -> e.getSalary() >= 5000); employeeList1.forEach(System.out::println); } 优化方案四:Lambda表达式和Stream API
@Test public void test7(){ System.out.println("年龄大于35岁的员工信息:"); employees.stream() .filter((e) -> e.getAge() >= 35) .forEach(System.out::println); System.out.println("工资大于5000的员工信息:"); employees.stream() .filter((e) -> e.getSalary() >= 5000) .forEach(System.out::println); }
分享标题:Lambda表达式的优势
本文URL:http://myzitong.com/article/ghdijp.html