繁体   English   中英

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

[英]How to replace multiple if-else statements to optimize code?

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

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;
        }
    }
}

你可以使用开关,但在这种情况下我认为if else是最好的方法

由于您声明检查的顺序并不重要,您可以使用正则表达式匹配和switch的组合:

static final Pattern KEYWORDS=Pattern.compile("one|two|tree|etc");

Matcher m=KEYWORDS.matcher("");
for(String s:array) {
    if(m.reset(s).find()) switch(m.group()) {
        case "one": //call first function
            break;
        case "two": //call second function
            break;
        case "three": //call third function
            break;
        case "etc": // etc
            break;
    }
}

因为这将在第一个匹配时停止,无论哪个关键字,对于包含接近开头的匹配的字符串,它可能比检查一个接一个的关键字更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM