Ваш подход полностью подходит, и было бы неплохо продолжить.
Если вы хотите еще больше сократить код, вы можете создать одну функцию следующим образом для сложения, вычитания и умножения.
public int apply(int a, int b, IntBinaryOperator func) {
return func.applyAsInt(a, b);
}
, но тогда вам нужно будет создать отдельную функцию для функции деления, чтобы вызвать исключение IllegalArgumentException
в случае, если вторым аргументом является 0
.
Обратите внимание, что яВы использовали функциональный интерфейс IntBinaryOperator
, чтобы избежать необходимости создавать интерфейс Operation
, но если последний является более значимым, вы можете оставить это.
В качестве альтернативы, вы можете определить функции встроенными и затем вызывать их:
IntBinaryOperator add = (num1, num2) -> num1 + num2;
IntBinaryOperator subtract = (num1, num2) -> num1 + num2;
IntBinaryOperator multiply = (num1, num2) -> num1 + num2;
IntBinaryOperator division = (num1, num2) -> {
if (num2 == 0)
throw new IllegalArgumentException("denominator cannot be zero");
return num1 / num2;
};
System.out.println(" Addition(12, 12) :" + add.applyAsInt(12, 12));
System.out.println(" Subtract(12, 12) :" + subtract.applyAsInt(12, 12));
System.out.println(" Multiply(12, 12) :" + multiply.applyAsInt(12, 12));
System.out.println(" Devide (12, 12) :" + division.applyAsInt(12, 12));