1.1 Java8的概述
- Java8于2014年3月发布,该版本是 Java 语言的一个重要版本,自Java5以来最具革命性的版本,该版本包含语言、编译器、库、工具和JVM等方面的多个新特性。
1.2 函数式接口
- 函数式接口主要指只包含一个抽象方法的接口,如:java.lang.Runnable等。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
- Java8中提供@FunctionalInterface注解来定义函数式接口,若定义的接口不符合函数式的规范便会报错。
@FunctionalInterface
public interface MyFunctionInterface {
void show();
}
- Java8中增加了java.util.function包,该包包含了常用的函数式接口,具体如下:
| 接口名称 | 方法声明 | 功能介绍 |
|---|
| Consumer | void accept(T t) | 根据指定的参数执行操作 |
| Supplier | T get() | 得到一个返回值 |
| Function<T,R> | R apply(T t) | 根据指定的参数执行操作并返回 |
| Predicate | boolean test(T t) | 判断指定的参数是否满足条件 |
1.3 函数式接口的使用方式
1.3.1 自定义类实现函数式接口得到接口类型的引用
public class MyFunctionInterfaceImpl implements MyFunctionInterface {
@Override
public void show() {
System.out.println("这里是接口的实现类");
}
}
MyFunctionInterface myFunctionInterface = new MyFunctionInterfaceImpl();
myFunctionInterface.show();
1.3.2 使用匿名内部类的方式得到接口类型的引用
MyFunctionInterface myFunctionInterface = new MyFunctionInterface() {
@Override
public void show() {
System.out.println("匿名内部类的方式");
}
};
myFunctionInterface.show();
1.3.3 使用Lambda表达式得到接口类型的引用
- Lambda 表达式是实例化函数式接口的新方式,允许将函数当做参数进行传递,从而使代码变的更加简洁和紧凑。
- 语法格式:(参数列表) -> { 方法体; }
- 其中()、参数类型、{} 以及return关键字 可以省略。
MyFunctionInterface myFunctionInterface = () -> {
System.out.println("lambda表达式的方式")
}
myFunctionInterface.show()
// 省略{}后的写法
MyFunctionInterface myFunctionInterface = () -> System.out.println("lambda表达式的方式")
myFunctionInterface.show()