我正在寻找一种更优雅的写作方式。
if (n > 1){
function_1();
}
if (n > 2){
function_2();
}
if (n > 3){
function_3();
}
...
如果n = 3: function_1和function2应该运行。
我认为开关在这里没有帮助,因为如果n是例如4,我希望它执行所有功能。 任何帮助表示赞赏。
答案 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();
但是,我不推荐任何一种解决方案。我认为你的原始版本更清晰。