Java8 if语句替换为try-catch块内的FP概念

时间:2018-09-16 08:17:36

标签: java functional-programming

有人可以告诉我一种用功能编程概念替换try块中的if语句的方法。没有条件运算符,谢谢。

    Predicate<Integer> isNegativeOrZero = i -> i <= 0;
    try {
        if (isNegativeOrZero.test(n)) throw new java.lang.Error("Negative number");
        return process(n);
    } catch(Error e) {
        return STATE.ERROR;
    }

替换此行代码:

if (isNegativeOrZero.test(n)) throw new java.lang.Error("Negative number");

1 个答案:

答案 0 :(得分:3)

所以你想要以下吗?

return i <= 0 ? STATE.ERROR : process(n);

在这种情况下,您将不会更简单,但是您可以编写

return Optional.of(n)
    .filter(i -> i > 0)
    .map(i -> process(i))
    .orElse(STATE.ERROR);

简而言之,在可能的情况下,应避免使用异常/错误进行控制,但是在功能编程中,您需要将其删除,否则将很丑陋。