本文最后更新于 455 天前,其中的信息可能已经有所发展或是发生改变。
Lambda
介绍
- java1.8的新特性,能够简洁的实现接口方法的调用
基本语法
(args) -> expressionargs: 参数列表,数据类型可以忽略,如果没有参数,可以使用空括号(),单个参数可以忽略括号->: Lambda运算符,表示由…生成expression: Lambda表达式主题,可以是单个表达式或代码块,如果是单条语句,可以省略大括号{},并且结果自动作为返回值
示例
//函数式接口
Function<String,Integer> length = new Function<>(){
@Override
public Integer apply(String value){
return value.length();
}
}
//Lambda表达式
Function<String,Integer> length = x -> x.length();
length.apply("hi");//2
方法引用
介绍
- 简化Lambda的写法,避免显式的Lambda表达式
语法
ClassName::Method
示例
//Lambda
Function<String,Integer> length = s -> s.length();
//方法引用
Function<String,Integer> length = String::length;
length.apply("hello");//5
构造方法引用
介绍
- 简化Lambda的写法,调用类的构造方法
语法
ClassName::new
示例
//Lambda
IntFunction<Integer> value = x -> new Integer(x);
//构造方法引用
IntFunction<Integer> value = Interger::new;
value.apply(10);//Integer
变量捕获
- lambda表达式只能捕获外部作用域的局部变量
- 不可在lambda表达式内修改这些局部变量,即变量必须是final或有效final的