Lambda表达式的优势
//原来的匿名内部类 @Test public void test1(){ Comparator<Integer> comparator = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Integer.compare(o1, o2); } }; TreeSet<Integer> ts = new TreeSet<>(comparator); }
//Lambda表达式 @Test public void test2(){ Comparator<Integer> comparator = (x ,y) -> Integer.compare(x, y); TreeSet<Integer> ts = new TreeSet<>(comparator); }
2. 用Lambda表达式优化代码需求1:获取当前公司中员工年龄大于35的员工信息
需求2:获取当前公司中员工工资大于5000的员工信息
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;}@Overridepublic String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}';}}
List<Employee> 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));
实现方式
@Testpublic void test3(){ //获取年龄大于35岁的员工信息 List<Employee> employeeList = filterEmployee(employees); System.out.println("年龄大于35岁的员工信息:"); for (Employee employee : employeeList){ System.out.println(employee); } //获取当前公司中员工工资大于5000的员工信息 List<Employee> employeeList1 = filterEmployees2(employees); System.out.println("工资大于5000的员工信息:"); for (Employee employee : employeeList1){ System.out.println(employee); }}获取当前公司中员工年龄大于35的员工信息public List<Employee> filterEmployee(List<Employee> employeeList){ List<Employee> emps = new ArrayList<>(); for (Employee emp : employeeList){ if (emp.getAge() >= 35){ emps.add(emp); } } return emps;}获取当前公司中员工工资大于5000的员工信息public List<Employee> filterEmployees2(List<Employee> employeeList){ ArrayList<Employee> employees = new ArrayList<>(); for (Employee employee : employeeList){ if (employee.getSalary() >= 5000){ employees.add(employee); } } return employees;}
优化方案一:策略设计模式
public interface MyPredicate<T> {public boolean test(T t);}
public class FilterEmployeeByAge implements MyPredicate<Employee>{@Overridepublic boolean test(Employee employee) { return employee.getAge() >= 35;}}
public class FilterEmployeeBySalary implements MyPredicate<Employee>{@Overridepublic boolean test(Employee employee) { return employee.getSalary() >= 5000;}}
@Testpublic void test4(){ List<Employee> employeeList = filterEmployee(employees, new FilterEmployeeByAge()); System.out.println("年龄大于35岁的员工信息:"); for (Employee employee : employeeList){ System.out.println(employee); } System.out.println("工资大于5000的员工信息:"); List<Employee> employeeList1 = filterEmployee(this.employees, new FilterEmployeeBySalary()); for (Employee employee : employeeList1){ System.out.println(employee); }}public List<Employee> filterEmployee(List<Employee> employeeList, MyPredicate<Employee> mp){ ArrayList<Employee> employees = new ArrayList<>(); for (Employee employee : employeeList){ if (mp.test(employee)){ employees.add(employee); } } return employees;}
优化方案二:匿名内部类
public interface MyPredicate<T> {public boolean test(T t);}
@Testpublic void test5(){ List<Employee> employeeList = filterEmployee(employees, new MyPredicate<Employee>() { @Override public boolean test(Employee employee) { return employee.getAge() >= 35; } }); System.out.println("年龄大于35岁的员工信息:"); for (Employee employee : employeeList){ System.out.println(employee); } List<Employee> employeeList1 = filterEmployee(employees, new MyPredicate<Employee>() { @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<Employee> filterEmployee(List<Employee> employeeList, MyPredicate<Employee> mp){ ArrayList<Employee> employees = new ArrayList<>(); for (Employee employee : employeeList){ if (mp.test(employee)){ employees.add(employee); } } return employees;}
@Testpublic void test6(){ System.out.println("年龄大于35岁的员工信息:"); List<Employee> employeeList = filterEmployee(employees, (e) -> e.getAge() >= 35); employeeList.forEach(System.out::println); System.out.println("工资大于5000的员工信息:"); List<Employee> employeeList1 = filterEmployee(employees, (e) -> e.getSalary() >= 5000); employeeList1.forEach(System.out::println);}
优化方案四:Lambda表达式和Stream API
@Testpublic 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);}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。