2.实质:语法糖,实质底层还是一个方法package domains;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class Employee {
private String name;
private int age;
private double salary;
}
package dao;
public interface TestPredicate<T> {
boolean test(T e);
}
package dao.daoImpl;
import dao.TestPredicate;
import domains.Employee;
public class FilterEmployeeByAge implements TestPredicate<Employee> {
@Override
public boolean test(Employee employee) {
return employee.getAge() > 24;
}
}
package dao.daoImpl;
import dao.TestPredicate;
import domains.Employee;
public class FilterEmployeeBySalary implements TestPredicate<Employee> {
@Override
public boolean test(Employee employee) {
return employee.getSalary() > 8000;
}
}
import dao.TestPredicate;
import dao.daoImpl.FilterEmployeeByAge;
import dao.daoImpl.FilterEmployeeBySalary;
import domains.Employee;
import org.junit.Test;
import java.util.*;
public class TestLambda {
List<Employee> employees = Arrays.asList(
new Employee("张三",8,100),
new Employee("李四",12,500),
new Employee("王五",18,3000),
new Employee("赵六",24,8000),
new Employee("田七",35,15000),
new Employee("吴八",40,25000)
);
@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> treeSet = new TreeSet<>(comparator);
}
@Test
public void test2(){
Comparator<Integer> comparator = (x,y) -> Integer.compare(x,y);
TreeSet<Integer> treeSet = new TreeSet<>(comparator);
TreeSet<Integer> integerTreeSet = new TreeSet<>((x,y) -> Integer.compare(x,y));
}
@Test
public void test3(){
List<Employee> filterEmployees = filterAgeEmployees(employees);
for (Employee filterEmployee : filterEmployees) {
System.out.println(filterEmployee);
}
}
@Test
public void test4(){
List<Employee> filterEmployees = filterEmployee(employees, new FilterEmployeeByAge());
for (Employee filterEmployee : filterEmployees) {
System.out.println(filterEmployee);
}
}
@Test
public void test5(){
List<Employee> filterEmployees = filterSalaryEmployees(employees);
for (Employee filterEmployee : filterEmployees) {
System.out.println(filterEmployee);
}
}
@Test
public void test6(){
List<Employee> filterEmployees = filterEmployee(employees,new FilterEmployeeBySalary());
for (Employee filterEmployee : filterEmployees) {
System.out.println(filterEmployee);
}
}
public List<Employee> filterAgeEmployees(List<Employee> employees){
ArrayList<Employee> employeeArrayList = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getAge() > 24){
employeeArrayList.add(employee);
}
}
return employeeArrayList;
}
public List<Employee> filterSalaryEmployees(List<Employee> employees){
ArrayList<Employee> employeeArrayList = new ArrayList<>();
for (Employee employee : employees) {
if(employee.getSalary() > 8000){
employeeArrayList.add(employee);
}
}
return employeeArrayList;
}
public List<Employee> filterEmployee(List<Employee> list, TestPredicate<Employee> predicate){
ArrayList<Employee> employeeArrayList = new ArrayList<>();
for (Employee employee : employees) {
if(predicate.test(employee)){
employeeArrayList.add(employee);
}
}
return employeeArrayList;
}
@Test
public void test7(){
List<Employee> filterEmployees = filterEmployee(employees,new TestPredicate<Employee>(){
@Override
public boolean test(Employee employee) {
return employee.getSalary() < 5000;
}
});
for (Employee filterEmployee : filterEmployees) {
System.out.println(filterEmployee);
}
}
@Test
public void test8(){
List<Employee> filterEmployees = filterEmployee(employees,(e) -> e.getSalary() < 5000);
filterEmployees.forEach(System.out::println);
}
@Test
public void test9(){
employees.stream().filter((e) -> e.getSalary() < 5000).forEach(System.out::println);
}
}