1. lambda表达式
注意事项
- 形参列表的数据烈性会自动推断
- 如果参数列表为空,只需保留()
- 如果形参只有一个,()可以省略,只需要参数的名称即可
- 如果执行语句只有一句,且无返回值,{}可以省略,若是有返回值,则若想省区{}必须同时省略return,且执行语句也保证只有一句
- lambda不会生成一个单独的内部类文件
基本语法
<函数式接口> <变量名> = (参数1,参数2) -> {
方法体
};
函数接口
检验接口是否为函数式接口
@FunctionalInterface
- 接口中只有一个抽象方法。该接口就是函数式接口
- 一句话,函数式接口带给我们最大的好处就是:可以使用极简的lambda表达式实例化接口。为什么这么说呢?我们或多或少使用过一些只有一个抽象方法的接口,比如 Runnable, ActionListener, Comparator…。比如,我们要用Comparator实现排序算法
lambda表达式:特殊的匿名类,语法更简洁。
lambda表达式:允许把函数作为一个方法的参数(函数作为方法参数传递),将代码向数据一样传递 使用方法如下:
例如线程Runnable接口:
//这是jdk的匿名内部类
new Runnable(){
public void run() {
System.out.println("这是匿名内部类");
}
};
//=================lambda表达式:方式一=====================
Runnable runnable = ()->{
System.out.println("这是jdk8的lambda表达式的特性");
};
//=================lambda表达式:方式二=====================
Runnable runnable1 = ()->System.out.println("这是jdk8的lambda表达式的特性");
//===================lambda表达式:方式三===================
//可以把方法体直接放到参数列表中来使用
Thread thread = new Thread(()-> System.out.println("这是jdk8的lambda表达式的特性"));
thread.start();
JDK8内置的函数接口
1、JAVA内置四大核心函数式接口
函数式接口 | 参数类型 | 返回类型 | 方法 |
---|---|---|---|
Consumer | T | void | void accept(T t) |
Supplier | 无 | T | T get() |
Function<T,R> | T | R | R apply(T t) |
Predicate | T | boolean | boolean test(T t) |
2、JAVA内置四大核心函数式接口
函数式接口 | 参数类型 | 返回类型 | 方法 |
---|---|---|---|
BiFunction<T,U,R> | T,U | R | R apply(T t, U u) |
UnaryOperator (Function子接口) | 无 | T | T get() |
BinaryOperator (BiFunction子接口) | T,T | T | T apply(T t1, T t2) |
BiConsumer<T,U> | T,u | void | void accept(T t, U u) |