开篇
JDK8大家知道并使用的特性莫过于Lambda,这个很多人会用,比如Stream流,但都是简单浅显的使用,比如调用集合的Stream API等,但不会自己定义函数接口或API,今天通过几个案例来提高下对Java 中函数式编程的使用。
案例演示
函数接口说明
接口 | 输入参数 | 返回类型 | 说明 |
---|---|---|---|
UnaryOperator | T | T | 一元函数,输入输出类型相同 |
Predicate | T | boolean | 断言 |
Consumer | T | / | 消费一个数据,只有输入没有输出 |
Function<T,R> | T | R | 输入 T 返回 R,有输入也有输出 |
Supplier | / | T | 提供一个数据,没有输入只有输出 |
BiFunction<T,U,R> | (T,U) | R | 两个输入参数 |
BiPredicate<L, R> | (L,R) | boolean | 两个输入参数 |
BiConsumer<T, U> | (T,U) | void | 两个输入参数 |
BinaryOperator | (T,T) | T | 二元函数,输入输出类型相同 |
案例一
Function<Integer, Integer> times2 = e -> e * 2;
Function<Integer, Integer> squared = e -> e * e;
// 先执行参数,再执行调用者
/*
* 1. 4 * 4 = 16 16 * 2 = 32
*/
System.out.println("result: " + times2.compose(squared).apply(4)); // 32
/*
* 先执行调用者: 4 * 2 = 8 再执行then传入的function 8 * 8 = 64
*/
System.out.println("result: " + times2.andThen(squared).apply(4)); // 64
这两个方法,andThen
表示在外面