【2.1.4 通用函数接口java.util.function.* 返回目录】
为了配合λ表达式的使用,定义了一些作为形参的函数接口。java.util.function包基本覆盖了程序员对函数接口的各种需求。
1.方法的类型签名
函数的类型签名,描述方法的形参列表类型通过本方法处理后,形成返回值类型。以如下格式描述:(形参列表类型) ->返回值类型
从方法的类型签名分析,java.util.function包的核心函数接口有4个。
Ø 函数型T ->R,完成参数类型T向结果类型R的转换。核心函数接口Function
Ø 判断型T ->boolean,核心函数接口Predicate/谓词
Ø 消费型T ->void,核心函数接口Consumer
Ø 供给型void->T,核心函数接口Supplier
其他函数接口与它们类似。各种类型签名可以拓展到二元如(T, U) -> R,三元及更多元的类型签名,难以支持。
由于Java泛型采用擦除技术,Java中不可以用同一个名字定义不同类型或不同数量的参数的泛型类,即无法定义Function<T, R>、Function<T,U, R>、Function<Integer, Integer >等,而必须取不同的类型名字。
2.避免装箱和拆箱
Java泛型仅针对引用类型,如果使用Function<Integer, Integer>,会将代码中的int进行装箱,从而在性能上付出代价。java.util.function包针对基本类型的int、double和long提供支持,当输入或/和输出为基本类型时,可以避免自动装箱的操作。
核心函数接口 |
简化或二元拓展 |
基本类型 |
Function<T, R> ,T ->R 共25个接口 |
|
IntFunction<R>,int->R LongFunction<R> DoubleFunction<R> IntToDoubleFunction, int->double IntToLongFunction LongToDoubleFunction, LongToIntFunction, DoubleToIntFunction DoubleToLongFunction ToIntFunction<T>, T->int ToDoubleFunction<T>, ToLongFunction<T> |
BiFunction<T,U,R> ,(T,U) ->R |
ToIntBiFu |