日常使用中,Function 和 Predicate 用的比较多,把某些方法用函数接口封装起来后,利用 Java 的 stream,可以让你的代码看起来更加简洁,在也不用写 for 循环了。
这些函数接口其实还扩展出来很多其他的接口,如接收两个参数返回一个对象的 BiFunction<A, B, C>,接收 B 和 C,并返回 A;接受一个对象 A 返回一个 int 类型的 IntFunction<A>。其实想想,这个接口也就是相当于 Function<int, A> 接受一个 A 对象,返回一个 int 类型。
我们可以通过猜方法名来知道他的意思,如 ToIntBiFunction<A,B>,意思也就是 接收 A 和 B 两个对象,返回一个 int 类型。
函数式编程思想
写多了 for 循环,都感觉 for 写的太丑了,能不用 for 就不用 for。后来发现 函数式编程就可以很好的代替 for。
要理解函数式编程,你需要特别明确的知道你要输入的东西,和你要输出的东西。不用考虑中间的过程。这和写的语句有一些不一样,要深入理解函数式编程,首先先要转化一下思考方式。
Java 函数式接口
Function<A, B> toA = (B a) -> {...};
Predicate<A> aIsTrue = (A a) -> {...};
Consumer<A> aConsumer = (A a) -> {...}
Supplier<A> aSupplier = () -> {return A;}
日常使用中,
Function
和Predicate
用的比较多,把某些方法用函数接口封装起来后,利用 Java 的 stream,可以让你的代码看起来更加简洁,在也不用写 for 循环了。这些函数接口其实还扩展出来很多其他的接口,如接收两个参数返回一个对象的
BiFunction<A, B, C>
,接收 B 和 C,并返回 A;接受一个对象 A 返回一个 int 类型的IntFunction<A>
。其实想想,这个接口也就是相当于Function<int, A>
接受一个 A 对象,返回一个 int 类型。我们可以通过猜方法名来知道他的意思,如
ToIntBiFunction<A,B>
,意思也就是 接收 A 和 B 两个对象,返回一个 int 类型。自定义函数接口
如果你觉得自带的这些满足不了你的需求,那你可以选择自定义函数接口。
使用
@FunctionalInterface
注解。比如你想传进 3 个参数,然后返回 1 个值,那你可以选择写两个 Function,或者就自定义函数接口。形式如下。
这段代码的意思是,输入 B,C,D 然后输出 A。当然了,你也可以调换顺序写,改成输入 A,B,C 然后输出 D。
调用的时候,我们可以这样子写