如何将嵌套的 if 语句替换为 switch 语句



我想使用switch语句的原因是替换if语句,因为if语句太长,但是如何用switch替换嵌套的if语句呢?

算法是这样的:

if(a very long statement are similar,except the string at the middle)
func1(parameters are same as func1,test1);
if(a very long statement are similar,except the string at the middle)
func2(parameter are same as func1,test2);
.
.
.
if(a very long statement are similar,except the string at the middle)
func16(parameter are same as func1,test16);

我做了以下操作,但有错误:

//List initialization...
for (int i = 0; i < list.size(); i++) {
    if (statement with list[i] == true) {
        switch (list[i]) {
            case "test1":
                func1(parameter1,test1);
            case "test2":
                enter code here
                func2(parameter1,test2);
            case "test3":
                func3(parameter1,test3);
            .
            .
            .
           case "test16":
           func16(parameter1,test16);
        }
    }
}

我正在使用Java。谁能给我一些建议。多谢。

在这种情况下,我倾向于采用策略模式,并为每个if分支创建一个策略。界面可能如下所示:

interface Strategy{
    boolean accepts(String value);
    void process(String value);
}

你可以像这样使用它:

List<Strategy> strategies = // initialize your strategies
list.forEach((item) -> {
  strategies.stream()
    .filter((s) -> s.accepts(item)) // find the appropriate strategy
    .findFirst()                    // if we found it
    .ifPresent(strategy -> strategy.process(item)); // apply it
    // or use .getOrElseThrow to fail fast if no strategy can be found
});

这样做的好处是每个策略都是可单独维护和测试的。另外:如果在不同的分支中有类似的代码,则可以使用公共超类。

显然,这是可以优化的。如果您预先知道所需的字符串,则可以将策略存储在HashMap中。如果您只是一个模糊的想法,也许树状图可以提供帮助。

相关内容

  • 没有找到相关文章

最新更新