java - 替换 If 语句?

标签 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]; 

我想知道是否有可能用某种语句替换整个 block ,该语句将从字符串中检测运算符并将其转换为操作?我意识到对于一些运算符来说,使用 switch 语句可能更容易,但我有很多这样的运算符,在 switch 语句顶部和底部评估运算符之间存在 5-10 毫秒的差异。

最佳答案

在 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]);

这里有更多的间接性,但它会给你 O(1) 分摊查找时间。

关于java - 替换 If 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28460452/

相关文章:

Java - setFileFilter 问题

Java - 创建一个包含固定 40 个元素的数组的列表

linux - 在 If-Else 语句中重定向 Echo 时,Shell 脚本显示错误消息

objective-c - 为什么我不能在 Objective-C 的 switch-case 语句中使用我的常量? [错误 = 表达式不是整型常量表达式]

java - 无法理解它是如何工作的 case MONDAY : FRIDAY:

c# - 切换大小写,检查 C# 3.5 中的范围

java.lang.NoClassDefFoundError : org/apache/tomcat/util/descriptor/tld/TldParser 错误

java - 从 try/catch block 中返回变量

java - 关于Java lang中的if语句

javascript - 从边上评估三 Angular 形