具有各种操作数的 Java lambda 表达式

标签 java lambda interface java-8 operator-overloading

此 lambda 表达式非常适合具有两个操作数(a 和 b)的数学运算。

public class Math {
  interface IntegerMath {
    int operation(int a, int b);       
  }

  private static int apply(int a, int b, IntegerMath op) {
    return op.operation(a, b);
  }

  public static void main(String... args) {
    IntegerMath addition = (a, b) -> a + b;
    IntegerMath subtraction = (a, b) -> a - b;
    System.out.println("40 + 2 = " + apply(40, 2, addition));
    System.out.println("20 - 10 = " + apply(20, 10, subtraction));

  }
}

如何通过可能的一元操作来增强此类

IntergerMath square = (a) -> a * a;

最佳答案

您无法使用 IntegerMath 来做到这一点,因为它是一个函数式接口(interface),其单个抽象方法需要两个 int 参数。您将需要一个用于一元运算的新接口(interface)。

顺便说一句,您不必自己定义这些接口(interface)。 java.util.function 包含您可以使用的接口(interface),例如 IntUnaryOperatorIntBinaryOperator

关于具有各种操作数的 Java lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651263/

相关文章:

python - 如何在 Python Pandas 中对同一数据框中的两列执行操作?

c++ - Lambda 引用自身

python - 对 lambda 方程进行运算

java - 为什么这条谷歌地图折线没有删除?

java - 用 Java 进行 TCP 套接字编程的好介绍?

java - 如何在二维数组中添加相邻单元格?

c# - C#接口(interface)的设计问题

Java 泛型 : Object Mapper Converting JSON to Java Object

c# - 虚拟属性是否比具体属性慢?

go - 无法将 StripPrefix 包装在另一个函数中(缺少 ServeHTTP 方法)