java函数式编程
程序员文章站
2022-06-07 12:11:28
...
最近在研究函数式编程,开始很痛苦,完全看不懂,但是不要着急,研究两天之后,大概有一些认知,首先看一下funcation接口。
一。Funcation详解:
重要的方法:
-
R apply(T t);
-
}default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { Objects.requireNonNull(before); return (V v) -> apply(before.apply(v));
-
}default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { Objects.requireNonNull(after); return (T t) -> after.apply(apply(t));
-
}static <T> Function<T, T> identity() { return t -> t;
看代码解释啥意思:
主要解释一下2.3方法的意思,14比较简单就不说了,
public static void main(String[] args) {
Function<Integer,Integer> A=i->i+1;
Function<Integer,Integer> B=i->i*i;
// A.andThen(B).apply(5) 就是把A.apply(5)的值作为作为andThen的参数传递进去
System.out.println("F111:"+A.andThen(B).apply(5));
System.out.println("F1:"+B.apply(A.apply(5)));
// 先执行B的apply函数,把结果作为B的apply的参数传递进去
System.out.println("F22:"+A.compose(B).apply(5));
System.out.println("F2:"+A.apply(B.apply(5)));
}
还是要说明下,,根据我的理解,上面代码中,AB都是一种规则,映射规则。apply()决定,执行这个规则后要做的事情,这里就是返回执行规则的结果,apply()里面的参数就是要传入的数据。多以,A.apply(5)指的就是,执行A规则,传入的参数是5,执行完之后要做的事就是apply,返回结果。我在一开始学习的时候不是很理解为什么要有apply()这个方法名,直接A(),不更好理解吗,后来仔细想想,方法名的作用就是要告知,执行完规则后要做的事情,是把结果返回还是消耗掉。以后在研究吧。