是否有与Integer :: sum相乘的乘法?

fre*_*low 4 java lambda higher-order-functions java-8 method-reference

从Java 8开始,Integer该类有一个静态sum方法,它添加了两个整数:

public static int sum(int a, int b) {
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

我可以将此方法传递给高阶函数,通过Integer::sum这些函数我发现它更具可读性(a, b) -> a + b.

是否有类似的静态方法进行乘法,所以我不必写(a, b) -> a * b?我在Integer课堂上找不到一个.

cri*_*007 5

Math::multiplyExact

static int multiplyExact(int x, int y)

返回参数的乘积,如果结果溢出int则抛出异常.

  • 我不能确信`Math :: multiplyExact`在实践中不足以满足OP的要求,但似乎有理由认为他想要的方法在各方面都与他想要替换的lambda具有相同的语义.更换一个永远不会抛出可能抛出的方法引用的lambda对我来说似乎有点危险. (2认同)
  • @JohnBollinger就个人而言,我更喜欢(可能)未检测到溢出的异常.但是,值得一提的是. (2认同)

Rog*_*gue 5

你可以自己做:

public static int mult(int a, int b) {
    return a * b;
}
Run Code Online (Sandbox Code Playgroud)

这似乎是显而易见回想起来,但是那之外,我不相信居然还有它乘你的,一个JDK包含的方法除了Math#multiplyExact(Math::multiplyExact),尽管这可能是比你更需要.