Function
接口?interface Function<T, R>
,它表明这样的一个函数,接受一个参数,而后返回一个结果。segmentfault
Function
接口的functional
方法R apply(T t)
表示,接受一个类型为T
的参数t,返回一个类型为R
的结果。注意:app
T
和R
能够是同一种类型,固然也能够是不一样的类型。那么问题来了,我有两个、三个参数怎么办?函数
BiFunction
接口?interface BiFunction<T, U, R>
,从名字上你们应该就能推断出来,它表明这样的一个函数,接受两个参数,而后返回一个结果。code
BiFunction
接口的functional
方法R apply(T t, U u);
表示,接受两个参数t和u,类型分别为T
和U
的,返回一个类型为R
的结果。注意:接口
T
、U
和R
能够是同一种类型,固然也能够是不一样的类型。如今我们再来看上面的问题,三个参数的时候怎么办?function
包下并无这样的接口,因此咯,本身动手丰衣足食:ip
public interface TripleFunction<T, U, M, R> { R apply(T t, U u, M m); }
function
包还很贴心地为咱们提供了不少经常使用的functional
接口,其中很大一部分就是和原始类型
(Primitive Type
)有关的。一旦掌握了其中的规律,能够达到触类旁通、事半功倍的效果。下面就跟着彬哥一块儿来看看吧。ci
做为参数
的原始类型来划分DoubleFunction
,接受一个类型为double
的参数,返回一个结果。get
@FunctionalInterface public interface DoubleFunction<R> { R apply(double value); }
IntFunction
,接受一个类型为int
的参数,返回一个结果。it
@FunctionalInterface public interface IntFunction<R> { R apply(int value); }
LongFunction
,接受一个类型为long
的参数,返回一个结果。io
@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包概述及大纲做为参考手册来回顾和查询。