JDK8新增加了一个包,java.util.function,这个包下所有的接口都是函数式接口,都是为了引入lambda表达式而设计的。
Lambda表达式的一般用法:作为一个《行为值》对象,当作实参传入某个方法。
作用 | 函数式接口 | 抽象方法 Lambda表达式 | 方法签名 Lambda形态 |
默认方法:(柯里化思想) 调用该方法得到另一个函数
|
消费 | Comsumer<T> | void accept(T t); | (T)-> void | andThen(Consumer<T> after){ } |
计算 | Function<T, R> | R apply(T t); | (T)-> R | compose(Function<V, T> before){ } andThen(Function<R, V> after){ } static <T> Function<T, T> identity() { |
条件 | Predicate<T> | boolean test(T t); | (T)-> boolean | 与 and(Predicate<T> other) 或 or(Predicate<T> other) 非 negate() |
工厂 | Supplier<T> | T get(); | ( )-> T | |
一元 操作 | UnaryOperator<T> extends Function<T,T> | T apply(T t); | (T)-> T |
作用 | 函数式接口 | 抽象方法 Lambda表达式 | 方法签名 Lambda形态 |
默认方法:(柯里化思想) 调用该方法得到另一个函数
|
消费 | BiConsumer<T, U> | void accept(T t, U u); | (T,U)-> void | |
计算 | BiFunction<T, U, R> | R apply(T t, U u); | (T,U)-> R | |
条件 | BiPredicate<T, U> | boolean test(T t, U u); | (T,U)-> boolean | |
两元 操作 | BinaryOperator<T> extends BiFunction<T,T,T> | T apply(T t, T u); | (T,T)-> T |
作用 | 函数式接口 | 抽象方法 Lambda表达式 | 方法签名 Lambda形态 |
默认方法:(柯里化思想) 调用该方法得到另一个函数
| ||
比较 | java.util. Comparator<T> |
| (T,T)-> int | |||
运行 | java.lang. Runnable |
| ( )-> void |
凡是你写的lambda表达式,通过java能自动推导出符合以上函数式接口中的抽象方法签名的,就不用另行自己新定义函数式接口,直接套用即可。