Tho*_*ine 6 java if-statement switch-statement
我试图使我的代码更有效,并替换我写的一堆if语句.到目前为止,我的程序基本上检查输入了什么运算符(例如+, - 等),然后计算它.例如,1 + 5给出6.当程序评估数字之间的符号(在我的例子中为"+")时,它将检查操作符是什么,然后相应地继续.例如,如果它是"+",它将采用1并添加5.代码的工作方式如下:
switch (op) {
case "+": // Addition
return args[0] + args[1];
case "-": // Subtraction
return args[0] - args[1];
case "*": // Multiplication
return args[0] * args[1];
case "/": // Division
return args[0] / args[1];
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能用某种语句替换整个块,该语句将从String中检测运算符并将其转换为操作?我意识到对于一些运算符来说,使用switch语句可能更容易,但是我有很多它们,并且在switch语句顶部和底部评估运算符之间存在5-10ms的差异.
Joh*_*ica 12
在Java 8中,您可以使用lambda函数的映射:
Map<String, IntBinaryOperator> operators = new HashMap<>();
operators.put("+", (a, b) -> a + b);
operators.put("-", (a, b) -> a - b);
operators.put("*", (a, b) -> a * b);
operators.put("/", (a, b) -> a / b);
...
return operators.get(op).apply(args[0], args[1]);
Run Code Online (Sandbox Code Playgroud)
这里有更多的间接,但它会给你O(1)摊销查询时间.