java - 如何替换多个if-else语句来优化代码?

标签 java if-statement optimization contains

我想知道是否有任何方法可以优化此代码。

String[] array;
for(String s:array){
   if(s.contains("one"))
       //call first function
   else if(s.contains("two"))
      //call second function
   ...and so on
}

字符串基本上是我从文件中读取的行。因此可以有很多行。我必须在这些行中查找特定的关键字并调用相应的函数。

最佳答案

这不会阻止您的代码执行许多 String#contains 调用,但是,它会避免 if/else 链接..

您可以创建一个键函数映射,然后遍历此映射的条目以找到要调用的方法。

public void one() {...}
public void two() {...}
private final Map<String, Runnable> lookup = new HashMap<String, Runnable>() {{
    put("one", this::one);
    put("two", this::two);
}};

然后您可以遍历条目集:

for(final String s : array) {
    for(final Map.Entry<String, Runnable> entry : lookup) {
        if (s.contains(entry.getKey())) {
            entry.getValue().run();
            break;
        }
    }
}

关于java - 如何替换多个if-else语句来优化代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40110120/

相关文章:

Java 将父类(super class)类型的对象定向到适当的方法

java - 如何处理大小超过 2 mb 的 post 数据

javascript - If 语句序列的替代结构?

javascript - 如何捕获输入元素的内容并测试它是否是字母 a-z A-Z 之间的字符,并且两个单词之间有空格

mysql - 在非常慢的服务器 2 上替代内连接

java - 对于 Windows 7 Ultimate N,directory.exists() 返回 false

java - java中将ResultSet转换为HashMap的List

php - PDO/MySQL 使用 if 语句获取多列

用优化编译得到一个错误的条件

python - 在无向图中找到最大数量的非相交 2-cycles