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

multiple ifs statements workflow (without elses)

我正在寻找一些更漂亮的写法。

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

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

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

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

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

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();

但是,我不推荐任何一种解决方案。我觉得你原来的版本更清楚。