java 8新特性(一)lambda表达式

java 8新特性(一)lambda表达式

一、lambda 表达式

public static  List<Employee> employees = Arrays.asList(
            new Employee("张三",18,1111.00),
            new Employee("李四",28,2222.00),
            new Employee("王五",38,3333.00),
            new Employee("赵六",48,4444.00),
            new Employee("候七",58,5555.00)
    );

public static List<Employee> filterEmployee3(List<Employee> list,
                                                 FilterEmployee<Employee> fe){
    List<Employee> emps = new ArrayList<>();
    for (Employee e: list){
        if(fe.compare(e)) {
            emps.add(e);
        }
    }
    return emps;
}

采用内部类实现

System.out.println("采用内部类实现接口......................");
List<Employee>  emps5 = filterEmployee3(employees, new FilterEmployee<Employee>() {
	@Override
	public boolean compare(Employee employee) {
		return employee.getAge() >35;
	}
});
emps5.forEach(System.out::println);

结果:
采用内部类实现接口......................
Employee{name='王五', age=38, salary=3333.0}
Employee{name='赵六', age=48, salary=4444.0}
Employee{name='候七', age=58, salary=5555.0}

采用lambda表达式

System.out.println("采用lambda表达式");
List<Employee>  emps6 =  filterEmployee3(employees,(e) -> e.getAge() <= 35 );
emps6.forEach(System.out::println);

二、 语法

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

三、变量作用域

lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。

需求:先按照年龄,年龄相同 再按照姓名比

public static List<Employee> employees = Arrays.asList(
	new Employee("张三",18,1111.00),
	new Employee("李四",58,2222.00),
	new Employee("王五",38,3333.00),
	new Employee("赵六",48,4444.00),
	new Employee("候七",58,5555.00)
);

// 需求:先按照年龄,年龄相同  再按照姓名比
public static void main(String[] args){

	System.out.println("Integer.compare(x.getAge(),y.getAge() = "+ Integer.compare(11,3));
	//
	Collections.sort(employees,(x,y)->{
		if(x.getAge() == y.getAge()){
			return x.getName().compareTo(y.getName());
		} else {
			// Integer.compare(x,y)  x>y ==> 1 x==y ==> 0 x<y ==> -1
			return Integer.compare(x.getAge(),y.getAge());
		}
	});
	employees.forEach(System.out::println);
	System.out.println("--------------------------------------------------------------");
}
posted @ 2021-01-11 21:01  小幸福_h  阅读(106)  评论(0编辑  收藏  举报