如何在Java 8中创建一个接受布尔条件和带参数作为参数的lambda的方法?
例如我有很多这段代码。
if(something is true) {
foo("a", "b", 2)
}
if(something else is true) {
bar("hello", 1)
}
想要创建一个接受boolean和lambda的方法,这样我就可以将所有if检查分解出去,这样我可以做这样的事情吗?
checkAndCAll(isValid, (a, b, c) -> { if(isValid) foo(a, b, c); })
checkAndCAll(isValid2, (a, b) -> { if(isValid2) bar(a, b, c); })
如果有更清洁的东西请建议
答案 0 :(得分:1)
不要认为你想要实施的方式是好的,但无论如何 - 你问的是这个吗?
public static void main(String[] args) {
//how to use
checkAndCAll(true, new Object[]{"param1", "param2"}, p -> someMethod(p));
checkAndCAll(true, new Object[]{"param1", 2 , new AtomicInteger(124)}, p -> anotherMethod(p));
}
public static void checkAndCAll(boolean b, Object[] params, Consumer<Object[]> consumer) {
if (b) consumer.accept(params);
}
public static void someMethod(Object[] args) {
//some method to execute
System.out.println(args);
}
public static void anotherMethod(Object[] args) {
//some method to execute
System.out.println(args);
}
答案 1 :(得分:1)
甚至可以更简单,参数可以直接传递给lambda:
public static void main(String[] args) {
//how to use
checkAndCAll(true, () -> someMethod("param1,", "param2"));
checkAndCAll(false, () -> anotherMethod("param1", 123));
}
public static void checkAndCAll(boolean b, Runnable action) {
if (b) action.run();
}
public static void someMethod(Object param1, Object param2) {
//some method to execute
}
public static void anotherMethod(String param1, Integer param2) {
//some method to execute
}
但我认为这不是很有用。传统的“if”需要相当数量的代码,此外更具可读性。实际上它只复制了Java的'if'语句语义。