多个ifs语句工作流程(没有elses)

时间:2016-04-14 15:39:13

标签: java if-statement conditional

我正在寻找一种更优雅的写作方式。

if (n > 1){
    function_1();
}
if (n > 2){
    function_2();
}
if (n > 3){
    function_3();
}
...

如果n = 3: function_1和function2应该运行。

我认为开关在这里没有帮助,因为如果n是例如4,我希望它执行所有功能。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

List<Runnable> runnables = Arrays.asList(
    () -> function_1(),
    () -> function_2(),
    () -> function_3()
    );
for (Runnable runnable : runnables.subList(0, Math.min(runnables.size(), Math.max(n - 1, 0)))) {
  runnable.run();
}

答案 1 :(得分:0)

如果执行顺序无关紧要,您可以使用switch并利用漏洞。

switch (Math.min(n, 4)) {
    case 4: function_3();
    case 3: function_2();
    case 2: function_1();
}

这将按照您的版本的相反顺序执行方法。

如果您需要在问题中指定执行顺序,并且您使用的是Java 8,则可以执行此操作。

Deque<Runnable> queue = new ArrayDeque<>();
switch (Math.min(n, 4)) {
    case 4: queue.addFirst(MyClass::function_3);
    case 3: queue.addFirst(MyClass::function_2);
    case 2: queue.addFirst(MyClass::function_1);
}
for (Runnable r : queue)
    r.run();

但是,我不推荐任何一种解决方案。我认为你的原始版本更清晰。