Function相关接口简介
什么是Function
接口?
interface Function<T, R>
,它代表这样的一个函数,接受一个参数,然后返回一个结果。
Function
接口的functional
方法
R apply(T t)
表示,接受一个类型为T
的参数t,返回一个类型为R
的结果。注意:
-
T
和R
可以是同一种类型,当然也可以是不同的类型。 - 这里只接受一个参数。
那么问题来了,我有两个、三个参数怎么办?
什么是BiFunction
接口?
interface BiFunction<T, U, R>
,从名字上大家应该就能推断出来,它代表这样的一个函数,接受两个参数,然后返回一个结果。
BiFunction
接口的functional
方法
R apply(T t, U u);
表示,接受两个参数t和u,类型分别为T
和U
的,返回一个类型为R
的结果。注意:
-
T
、U
和R
可以是同一种类型,当然也可以是不同的类型。 - 这里只接受两个参数。
现在咱们再来看上面的问题,三个参数的时候怎么办?function
包下并没有这样的接口,所以咯,自己动手丰衣足食:
public interface TripleFunction<T, U, M, R> {
R apply(T t, U u, M m);
}
更进一步
function
包还很贴心地为我们提供了很多常用的functional
接口,其中很大一部分就是和原始类型
(Primitive Type
)有关的。一旦掌握了其中的规律,可以达到举一反三、事半功倍的效果。下面就跟着彬哥一起来看看吧。
以作为参数
的原始类型来划分
-
DoubleFunction
,接受一个类型为double
的参数,返回一个结果。@FunctionalInterface public interface DoubleFunction<R> { R apply(double value); }
-
IntFunction
,接受一个类型为int
的参数,返回一个结果。@FunctionalInterface public interface IntFunction<R> { R apply(int value); }
-
LongFunction
,接受一个类型为long
的参数,返回一个结果。@FunctionalInterface public interface LongFunction<R> { R apply(long value); }
以作为返回值
的原始类型来划分
-
ToDoubleFunction
,接受一个参数,返回一个类型为double
的结果。@FunctionalInterface public interface ToDoubleFunction<R> { double applyAsDouble(T value); }
-
ToIntFunction
,接受一个参数,返回一个类型为int
的结果。@FunctionalInterface public interface ToIntFunction<R> { int applyAsInt(T value); }
-
ToLongFunction
,接受一个参数,返回一个类型为long
的结果。@FunctionalInterface public interface ToLongFunction<R> { long applyAsLong(T value); }
参数和返回值相互转化的
3个作为参数的和3个作为返回值的相互组合、去掉重复的
嗯,又Get到6种functional接口:
DoubleToIntFunction
,DoubleToLongFunction
,IntToDoubleFunction
,IntToLongFunction
,LongToDoubleFunction
,LongToIntFunction
。
再更进一步
刚刚咱们划分出来的这个12个functional接口都是和Function
相关的(一元),那function
包有没有给我们提供其他和BiFunction
相关的functional接口呢?
当然有。
那咱们就来看看这些二元的functional接口吧。
-
ToDoubleBiFunction
,接受两个参数,返回一个类型为double
的结果。@FunctionalInterface public interface ToDoubleBiFunction<R> { double applyAsDouble(T t, U u); }
-
ToIntBiFunction
,接受两个参数,返回一个类型为int
的结果。@FunctionalInterface public interface ToIntBiFunction<R> { int applyAsInt(T t, U u); }
-
ToLongBiFunction
,接受两个参数,返回一个类型为long
的结果。@FunctionalInterface public interface ToLongBiFunction<R> { long applyAsLong(T t, U u); }
彬哥,这些只是作为返回值的接口,按照上面一元function的划分,那作为参数
和相互转化
的二元接口呢?
那些啊,funciton
包就并没有提供了,一来不常用,二来啊,经过彬哥的介绍,相信你已经掌握规律了,很容易就写出来了吧?那就作为课后作业如何?
小结
这一讲,咱们主要介绍了Function
相关的functional接口,按大的方面可以以一元和二元来分类;再细分的话,可以按原始类型作为参数
、作为返回值
和参数返回值相互转化
的类别来划分。
另外呀,可以用function包概述及大纲作为参考手册来回顾和查询。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。