Java8 if 语句在 try-catch block 中替换为 FP 概念

标签 java functional-programming

有人能告诉我用函数式编程概念替换 try block 中的 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");

最佳答案

所以你想要以下内容?

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

在这种情况下你不会变得更简单但是你可以写

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

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

关于Java8 if 语句在 try-catch block 中替换为 FP 概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52352275/

相关文章:

javascript - 遍历数组并在匹配正确值时退出?

java - Jackson 展开/包裹对象

java - 计算回边以获得有向图中的循环数

java - 有人可以告诉我如何在主类中调用我的方法吗

java - Lambda 表达式中方法引用的方法引用

scala - Scala 中的隐式类

java - 使用 SQL Server 数据库在数据库中插入多行

java - 如何更新 MySQL 中的多个列(通过 Java)?

haskell - 如何推断 Scott 编码的 List 构造函数的类型?

functional-programming - Agda:我能证明具有不同构造函数的类型是不相交的吗?