为什么函数组合在IntFunction中不可用



我正在阅读第三章现代Java中的函数组合部分。

我无法理解为什么我不能编写IntFunction。我是不是犯了一个愚蠢的错误,或者这背后有什么设计决定?

这是我的代码,在评论中有错误

package mja;
import java.util.function.Function;
import java.util.function.IntFunction;
public class AppTest2 {
public static void main(String[] args) {

IntFunction<Integer> plusOne = x -> x+1;
IntFunction<Integer> square = x -> (int) Math.pow(x,2);

// Compiler can't find method andThen in IntFunction and not allowing to compile
IntFunction<Integer> incrementThenSquare = plusOne.andThen(square); 
int result = incrementThenSquare.apply(1);
Function<Integer, Integer> plusOne2 = x -> x + 1;
Function<Integer, Integer> square2 = x -> (int) Math.pow(x,2);

//Below works perfectly
Function<Integer, Integer> incrementThenSquare2 = plusOne2.andThen(square2);
int result2 = incrementThenSquare2.apply(1);
}
}

在您的示例中,使用IntFunction<Integer>并不是一个真正的最佳选择,这可能是您陷入困境的原因。

当试图处理一个接受int并返回int的函数时,您需要使用IntUnaryOperator,它具有您要查找的方法andThen(IntUnaryOperator)

它没有在IntFunction<R>中实现的原因是,您不能确定您的函数是否会返回下一个IntFunction<R>所需的输入,当然这是int

您的情况很简单,但想象一下有一个IntFunction<List<String>>,您不能链接函数,因为IntFunction<R>不接受List<String>作为输入。


这是您更正的示例

IntUnaryOperator plusOne = x -> x + 1;
IntUnaryOperator square = x -> (int) Math.pow(x, 2);
IntUnaryOperator incrementThenSquare = plusOne.andThen(square);
int result = incrementThenSquare.applyAsInt(1);
System.out.println("result = " + result); // result = 4

相关内容

  • 没有找到相关文章

最新更新