具有杂项操作数的Java lambda表达式

具有杂项操作数的Java lambda表达式,java,lambda,interface,java-8,operator-overloading,Java,Lambda,Interface,Java 8,Operator Overloading,此lambda表达式适用于具有两个操作数(a和b)的数学运算 例如,如何使用可能的一元操作来增强此类 IntergerMath square = (a) -> a * a; ?您不能使用IntegerMath实现,因为它是一个函数接口,其单个抽象方法需要两个int参数。一元操作需要一个新的接口 顺便说一句,您不必自己定义这些接口java.util.function包含可以使用的接口,例如IntUnaryOperator和IntBinaryOperator,因为square方法没有相同的签

此lambda表达式适用于具有两个操作数(a和b)的数学运算

例如,如何使用可能的一元操作来增强此类

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

您不能使用
IntegerMath
实现,因为它是一个函数接口,其单个抽象方法需要两个
int
参数。一元操作需要一个新的接口


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

,因为
square
方法没有相同的签名,所以无法执行此操作

请注意,您还可以使用
IntBinaryOperator
IntUnaryOperator
(您可以注意到它们是完全独立的),而不是创建自己的接口

一元操作需要一个新的接口

IntergerMath square = (a) -> a * a;
public class Math {
  interface BinMath {
    int operation(int a, int b);

  }

  interface UnMath {
    int operation(int a);

  }

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

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

  public static void main(String... args) {
    BinMath addition = (a, b) -> a + b;
    BinMath subtraction = (a, b) -> a - b;
    UnMath square = (a) -> a * a;

    System.out.println("40 + 2 = " + apply(40, 2, addition));
    System.out.println("20 - 10 = " + apply(20, 10, subtraction));
    System.out.println("20² = " + apply(20, square));

  }
}