函数式接口:实际上感觉基本体现在参数的配置上
Function:<T,R> 参数很正常,参数->结果
- R apply(T t) 相当于方法的调用
- compose(Function before) 先调用before再调用本身
- andThen(Function after) 与上面的相反
Predict:<T, boolean> 返回为boolean
- boolean test(T t) 相当于方法的调用
- and(Predict) 与
- or(Predict) 或
- negate 取反
Supplier:
没有参数传入,直接返回一个结果,相当于new的感觉 - get() 方法的调用
Consumer:
没有参数返回,直接消费参数 - accept(T t) 方法的基本调用
- andThen(Consumer after) 和function的andThen基本一致
以上基本上都是单参数的,多参数可以有BiFunction、Bixxx等,应用方法基本一致
一些基本的应用场景
- stream
IntPredicate filteThree = (i) -> i%3 != 0; IntStream.range(1, 10) .filter(filteThree)//当然如果不复用而且简单,优先直接lambda吧 .forEach(System.out::println);
- optional 像类似这种一般需要把函数当做参数传递的基本都很适合