如何在Java 8中创建一个接受布尔条件和带参数的lambda作为参数的方法?

时间:2017-06-30 08:48:21

标签: java lambda

如何在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); })

如果有更清洁的东西请建议

2 个答案:

答案 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'语句语义。