在Java中,IntFunction,LongFunction等特殊接口的用途是什么?

时间:2018-02-07 13:26:09

标签: java java-8

同样,我们为Int*Double*Long*提供了与FunctionSupplierPredicate对应的不同界面。

在我看来,使用这些特殊接口的唯一好处是使代码更具可读性并强制其客户端仅使用该特定类型作为输入。

但除此之外,我是否遗漏了其他一些用例?

2 个答案:

答案 0 :(得分:6)

这些接口的目标是允许直接使用原始类型。这样可以节省自动装箱和自动装箱功能,从而使这些界面(以及依赖于它们的相关IntStreamLongStreamDoubleStream)更有效。

例如,您使用的Function<Integer,R>代替使用Integer方法接受R并生成IntFunction<R>类型的结果,而不是int使用R采用int并生成类型int的结果的方法。如果您将Function<Integer,R>传递给该函数,则可以避免在将IN传递给IN方法时发生的装箱。

答案 1 :(得分:4)

IntPredicate使用int作为输入,而Predicate<Integer>则需要Integer,所以基本上没有装箱/拆箱。

这也为基元引入了额外的方法,例如,例如IntStream#sum