Lambda引言
Lambda表达式:可以方便我们把方法当做参数传递
package airycode_java8.nice1; import org.junit.Test; import java.util.*; /** * Created by admin on 2018/12/28. */ public class TestLambda { public static void main(String[] args) { List<Employee> employees = filterEmployee(employeeList, new FilterEmployeeByAge()); System.out.println(employees); System.out.println("-------------------------------------------"); List<Employee> employees2 = filterEmployee(employeeList, new FilterEmployeeBySalary()); System.out.println(employees2); System.out.println("======================="); test1111(); } //匿名内部类 public void test(){ Comparator<Integer> com = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Integer.compare(o1,o2); } }; TreeSet<Integer> ts = new TreeSet<>(com); } //Lambda表达式 public void testL(){ Comparator<Integer> com = (x,y)->Integer.compare(x,y); TreeSet<Integer> ts = new TreeSet<>(com); } //准备数据 static List<Employee> employeeList = Arrays.asList( new Employee("张三",18,9999.99, Employee.Status.FREE), new Employee("李四",38,5555.55,Employee.Status.BUSY), new Employee("王五",50,6666.66,Employee.Status.VOCATION), new Employee("赵六",16,3333.33,Employee.Status.FREE), new Employee("田七",8,7777.77,Employee.Status.BUSY) ); //需求:获取当前公司员工年龄大于35的员工的信息 public List<Employee> filterEmployees(List<Employee>employeeList){ List<Employee> emps = new ArrayList<>(); for (Employee emp:employeeList) { if (emp.getAge() >= 35) { emps.add(emp); } } return emps; } //需求:改变1:获取当前公司员工工资大于5000的员工信息 public List<Employee> filterEmployees2(List<Employee>employeeList){ List<Employee> emps = new ArrayList<>(); for (Employee emp:employeeList) { if (emp.getSalary()>=5000) { emps.add(emp); } } return emps; } //优化方式1:设计模式优(策略设计模式)化上述需求的改变 public static List<Employee> filterEmployee(List<Employee>employeeList,MyPredicate<Employee> mp){ List<Employee> emps = new ArrayList<>(); for (Employee emp:employeeList) { if (mp.test(emp)) { emps.add(emp); } } return emps; } //优化方式2:匿名内部类 public static void test1111(){ List<Employee> list = filterEmployee(employeeList, new MyPredicate<Employee>() { @Override public boolean test(Employee employee) { return employee.getSalary() <= 5000; } }); System.out.println(list); } //优化方式2:匿名内部类 @Test public void test5(){ List<Employee> list = filterEmployee(employeeList, new MyPredicate<Employee>() { @Override public boolean test(Employee employee) { return employee.getSalary() <= 5000; } }); System.out.println(list); } //优化方式3.Lambda表达式 @Test public void test6(){ List<Employee> employees = filterEmployee(employeeList, employee -> employee.getSalary() <= 5000); employees.forEach(System.out::println); } //优化方式4.上述代码不存在的写法(Stream API) @Test public void test7(){ employeeList.stream().filter(employee -> employee.getSalary()<5000).forEach(System.out::println); System.out.println("----------------------------"); //提取所有的名字 employeeList.stream().map(Employee::getName).forEach(System.out::println); } } 新建employee类: package airycode_java8.nice1; /** * Created by admin on 2018/12/28. */ public class Employee { private String name; private int age; private double salary; private Status status; public Employee() { super(); } public Employee(int age){ this.age = age; } public Employee(String name, int age, double salary, Status status) { this.name = name; this.age = age; this.salary = salary; this.status = status; } public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; } 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 + ", status=" + status + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Employee employee = (Employee) o; if (age != employee.age) return false; if (Double.compare(employee.salary, salary) != 0) return false; return name != null ? name.equals(employee.name) : employee.name == null; } @Override public int hashCode() { int result; long temp; result = name != null ? name.hashCode() : 0; result = 31 * result + age; temp = Double.doubleToLongBits(salary); result = 31 * result + (int) (temp ^ (temp >>> 32)); return result; } public enum Status{ FREE,BUSY,VOCATION; } } package airycode_java8.nice1; /** * Created by admin on 2018/12/28. */ public class FilterEmployeeByAge implements MyPredicate<Employee> { @Override public boolean test(Employee employee) { return employee.getAge()>=35; } } package airycode_java8.nice1; /** * Created by admin on 2018/12/28. */ public class FilterEmployeeBySalary implements MyPredicate<Employee> { @Override public boolean test(Employee employee) { return employee.getSalary()>=5000; } } package airycode_java8.nice1; /** * Created by admin on 2018/12/28. */ public interface MyPredicate<T> { public boolean test(T t); }