为什么函数组合在 IntFunction 中不可用
Why function composing not available in IntFunction
我正在阅读第 3 章现代 Java 中的函数组合部分。
我不明白为什么我不能编写 IntFunctions。我是犯了一个愚蠢的错误还是这背后有什么设计决定?
这是我的代码,注释有误
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
和 return 一个 int
的函数时,您想使用 IntUnaryOperator
方法 [=15] =] 你要找的。
它没有在 IntFunction<R>
中实现的原因是你不能确定你的函数将 return 下一个 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
我正在阅读第 3 章现代 Java 中的函数组合部分。
我不明白为什么我不能编写 IntFunctions。我是犯了一个愚蠢的错误还是这背后有什么设计决定?
这是我的代码,注释有误
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
和 return 一个 int
的函数时,您想使用 IntUnaryOperator
方法 [=15] =] 你要找的。
它没有在 IntFunction<R>
中实现的原因是你不能确定你的函数将 return 下一个 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