官方解释:

一个函数式接口,函数方法为 apply(Object);
接受一个参数,返回一个接口;

  1. @FunctionalInterface
  2. public interface Function<T, R> {
  3. // 待实现的 函数式 接口
  4. R apply(T t);
  5. // 将两个函数式接口拼接在一起,第1个方法的结果作为 第二个方法的参数
  6. default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
  7. Objects.requireNonNull(before);
  8. return (V v) -> apply(before.apply(v));
  9. }
  10. // 将两个函数式接口拼接在一起,第1个方法的结果作为 第二个方法的参数 【与上一个行为相反,参见下面case】
  11. default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
  12. Objects.requireNonNull(after);
  13. return (T t) -> after.apply(apply(t));
  14. }
  15. static <T> Function<T, T> identity() {
  16. return t -> t;
  17. }
  18. }

案例

  1. /**
  2. * function demo
  3. */
  4. public class FunctionTest {
  5. public static int compute(int a, Function<Integer, Integer> function) {
  6. return function.apply(a);
  7. }
  8. public static int composeCompute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {
  9. return function1.compose(function2).apply(a);
  10. }
  11. public static int andThenCompute(int a,Function<Integer,Integer> function1,Function<Integer,Integer> function2){
  12. return function1.andThen(function2).apply(a);
  13. }
  14. public static int biCompute(int a,int b, BiFunction<Integer,Integer,Integer> function){
  15. return function.apply(a,b);
  16. }
  17. public static void main(String[] args) {
  18. // int result = compute(1, value -> value + 1);
  19. // int result = composeCompute(1,value -> value + 1,value -> value * 2);
  20. // int result = andThenCompute(1,value -> value + 1,value -> value * 2);
  21. int result = biCompute(1,2, Integer::sum);
  22. System.out.println("-------> " + result);
  23. }
  24. }