jdk 1.8 新特性:
-
接口中增加了default方法(默认实现的方法)
- 可以升级接口并且不需要继承这个接口的地方一一实现。更加便于软件升级;
- 示例:
- jdk1.8版本之后List接口中新增了几个default方法,而实现List接口的ArrayList、LinkedList等不需要实现父类接口的方法,这就是jdk1.8接口增加default方法最大的好处。
-
函数式编程,lambda表达式
- 函数式接口:可以使用 注解@FunctionalInterface 声明该接口只有一个需要实现的方法
- lambda 表达式:返回一个 —> 实现了指定接口抽象方法的对象实例,而不是调用了方法!!
函数式编程/lambda
接口 | 输入参数 | 返回类型 | 说明 |
Predicate<T> | T | boolean | 断言 |
Consumer<T> | T | / | 消费一个数据 |
Supplier<T> | / | T | 提供一个数据 |
UnaryOperator<T> | T | T | 一元函数(输入输出类型相同) |
BiFunction<T,U,R> | (T,U) | R | 2元函数—2个参数类型,一个返回类型 |
BinaryOperator<T> | T | T | 2元函数——输入输出类型相同 |
代码示例:
import java.util.function.*;
public class Demo1 {
public static void main(String[] args) {
// 断言函数接口
// Predicate<T>、IntPredicate
IntPredicate intPredicate = (p -> p > 0);
System.out.println(intPredicate.test(-90));
System.out.println(intPredicate.test(90));
// 消费函数接口
// Consumer、IntConsumer
IntConsumer consumer = (c -> System.out.println("消费了" + c));
consumer.accept(100);
// 输入T,输出R的函数
Function<String,Integer> function = ((s -> Integer.parseInt(s)));
System.out.println(function.andThen(s -> "输入的是:"+s).apply("100")); // 使用了链式编程
// 提供一个数据
Supplier<Integer> supplier = (() -> 1);
System.out.println(supplier.get());
// 一元函数 (输入输出类型相同)
UnaryOperator<Integer> unaryOperator = ((i) -> i + 100);
System.out.println(unaryOperator.apply(100));
// 2个输入的函数。两个入参类型,一个返回类型
BiFunction<Integer,Long,Double> biFunction = ((i,j) -> Double.valueOf(i + j));
System.out.println(biFunction.apply(10,100L));
// 二元函数(输出输入类型相同)
BinaryOperator<Integer> binaryOperator = ((i,j) -> i+j);
System.out.println(binaryOperator.apply(100,10));
}
}