【发布时间】:2018-09-16 21:28:11
【问题描述】:
我正在尝试用BinaryOperator 功能接口替换算术运算的通用开关。
基本方法是:
private static int computeOne(int res, String operand, String operation) {
int number = Integer.parseInt(operand);
switch (operation) {
case "+":
res += number;
break;
case "-":
res -= number;
break;
case "*":
res *= number;
break;
case "/":
res = (number != 0 ? res / number : Integer.MAX_VALUE);
break;
default:
res = 0;
System.out.println("unknown operation");
}
return res;
}
据我了解,有必要这样写:
BinaryOperator<Integer> action = (a,b) -> computeExpression(a + operation + b);
action.apply(res, operand);
但我不明白如何避免 computeExpression 中的 switch 与 computeOne 相同。
【问题讨论】:
-
我不得不承认,我不明白这个问题,即使有一个公认的答案。 computeExpression 似乎只与 ComputeOne 模糊相关,操作数和操作都是字符串,原因不明。什么是限制(操作是变量?字符串类型?),目标是什么?将 String 转换为 Int 似乎不是问题,那么为什么会这样呢?
a + operation + b看起来会导致“42 * 14”。当您以后需要拆分它们时,为什么要合并它们? -
@userunknown,我认为他的意思是
computeExpression(a, operation, b)使其类似于computeOne的签名
标签: java java-8 functional-interface binary-operators