在try-catch块中用FP概念替换Java8-if语句

在try-catch块中用FP概念替换Java8-if语句,java,functional-programming,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

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

那么你想要下面的

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

简而言之,您应该避免在可能的情况下使用异常/错误esp进行控制,但在函数式编程中,您需要删除它们,否则会很难看。

这假设
过程
也不会抛出错误(并不是说您无论如何都应该捕获错误…)。这些只是任务的大学要求(摆脱带有函数编程概念的给定if语句,没有ifs、循环等),不喜欢这样做,但它可以工作并满足要求。非常感谢。@MarisRucko这不符合“无条件运算符”的要求:
?:
是条件运算符。你是说“无条件语句”吗?传递给映射的lambda可能被替换为方法引用。无法编辑答案,因为不清楚它是实例还是静态方法。这看起来确实像是试图使用函数编程“仅仅因为”。使用简单的旧条件语句/表达式更容易表达。是否
进程
抛出
错误
?您是否意识到错误只应用于无法实现的情况(例如,内存不足),其中基本上唯一明智的做法是放弃并使程序崩溃?鉴于此,如果您希望
进程
可能失败,则应该抛出一个选中的异常(异常的子类型,但不是RuntimeException的子类型)@AndyTurner我同意,这部分我做得很差,谢谢你提供的相关信息。但这些是大学在其中一项任务中给出的要求。无论如何,谢谢。
return i <= 0 ? STATE.ERROR : process(n);
return Optional.of(n)
    .filter(i -> i > 0)
    .map(i -> process(i))
    .orElse(STATE.ERROR);