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

Anu*_*aya 5 java optimization if-statement 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
}
Run Code Online (Sandbox Code Playgroud)

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

fla*_*kes 5

这不会阻止您进行多次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);
}};
Run Code Online (Sandbox Code Playgroud)

然后,您可以遍历条目集:

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