首页 > 解决方案 > Java8 if 语句替换为 try-catch 块中的 FP 概念

问题描述

有人可以告诉我一种用函数式编程概念替换 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");

标签: javafunctional-programming

解决方案


所以你想要以下?

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

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

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

简而言之,您应该尽可能避免使用异常/错误,尤其是用于控制,但在函数式编程中,您需要删除它们,否则会很丑陋。


推荐阅读