我想使用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中。如果您只是一个模糊的想法,也许树状图可以提供帮助。