java - 一个操作数为 null 的 BigDecimal min() 方法

标签 java java-8 bigdecimal

我有这个比较:

BigDecimal firstLimit = null; <<-------------------------sometimes firstLimit could be null
BigDecimal secondLimit = BigDecimal.valueof(10); <<--- sometimes secondLimit can be null
BigDecimal thirdLimit = BigDecimal.valueof(20);  <<--- sometimes thirdLimit can be null
BigDecimal minLimit = firstLimit.min(secondLimit.min(thirLimit))

最初,我尝试设置任何最终为 null 且具有任意上限的值,但我不允许这样做。这意味着对于冗长的 if-else-if,我需要摆脱这种单行比较解决方案,而我真的不希望这样做。 是否有一种优雅的方式来处理 null 案例场景。任何建议将不胜感激。 谢谢。

最佳答案

我认为您可以像这样使用 Stream.of:

BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
        .filter(Objects::nonNull)
        .min(BigDecimal::compareTo)
        .orElse(null); // Or return a default value

或者,如果所有输入都为空,您可以抛出异常:

BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
        .filter(Objects::nonNull)
        .min(BigDecimal::compareTo)
        .orElseThrow(() -> new IllegalArgumentException("All values are null"));

或者正如 Holger 在评论中提到的那样,您可以使用 .min(Comparator.naturalOrder())

而不是 .min(BigDecimal::compareTo)
BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
        .filter(Objects::nonNull)
        .min(Comparator.naturalOrder())
        .orElseThrow(() -> new IllegalArgumentException("All values are null"));

关于java - 一个操作数为 null 的 BigDecimal min() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62624498/

相关文章:

java - 将 ANTLR 解析规则映射到用于代码生成的自定义 Java AST 类

java - Spring Boot,使用 application-{profile}.properties

java - CompletableFuture supplyAsync

java - 你能用 Java 复制 Excel 中的 Floor 函数吗?

Java 数字/数学抽象

java - 如何在内部服务器不可见的Internet服务器上运行Spring项目

java - 为什么在 Collections 中使用比较器而不是 equals()?

Java 8 默认方法覆盖(和 eclipse)

java-8 - 流 : "cannot convert Comparator to int" when using method reference

java - BigDecimal.add() 被忽略