Lambda表达式
Lambda表达式支持将一个方法【行为】当做参数传递,这种编程方式称为【函数式编程】,这种编程方式最大的特点就是代码紧凑,减少冗余代码,让编程边的更加简洁
语法格式
Lembda表达式通过左侧的参数,右侧的表达式和中间的右箭头组成:
- • 参数可以为空
- • 可以没有返回值
// 有参有返回值
(parameter1,parameter12,...) -> {
expression;
...
return xxx;
}
// 无参有返回值
() -> {
expression;
...
return xxx;
}
// 有参无返回值
(parameter1,parameter12,...) -> {
expression;
...
}
// 无参无返回值
() -> {
expression;
...
}
实现原理
Lambda表达式也并不是想用就用,必须依赖于函数式接口才可使用
• 函数式接口
:即接口中只有一个抽象法的接口,在JDK8及以后版本都会使用 @FunctionalInterface注解修饰
• 类型推断
:Lambda表达式无需指定参数类型,程序依然可以编译,Lambda表达式的类型依据上下文环境,由编译器推断出来参数类型,这就是类型推断
实例
/**
* 无参函数式接口
*/
public class NoArgsMain {
public static void main(String[] args) {
// 1、原始方式实现
Supplier<Integer> s1 = new Supplier<Integer>() {
@Override
public Integer get() {
return 1024;
}
};
// 通过get方法获取返回值
System.out.println(s1.get());
// 2、通过Lambda表达是实现
Supplier<String> s2 = () -> {
return "Lambda实现";
};
// 通过get方法获取返回值
System.out.println(s2.get());
}
}
简化代码
如果Lambda表达式有返回值且代码体只有一行代码时,return和大括号可以省略不写
Supplier<String> s2 = () -> "Lambda实现";
1、如果只有一个参数则可以省略小括号
2、代码体只有一行代码则可以省略大括号
Consumer<String> consumer2 = str -> System.out.println("我是Lambda消费型接口," + str);
consumer2.accept("qihe");
总结
如果代码体只有一行代码,无论有无参数,大括号都可省略
• 如果代码体只有一行代码,有返回值则return可以省略
• 如果有且仅有一个参数,参数的小括号可以省略,没有参数和有多个参数都不可省略