我有这个比较:
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))
Run Code Online (Sandbox Code Playgroud)
最初,我尝试设置任何最终为空的值,并使用任意上限值,但我不允许这样做。这意味着我需要为冗长的 if-else-if 去掉这个单行比较解决方案,我真的不想这样做。是否有一种优雅的方法来处理空情况。任何建议将不胜感激。谢谢你。
我认为你可以这样使用Stream.of:
BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
.filter(Objects::nonNull)
.min(BigDecimal::compareTo)
.orElse(null); // Or return a default value
Run Code Online (Sandbox Code Playgroud)
或者,如果所有输入都为空,您可以抛出异常:
BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
.filter(Objects::nonNull)
.min(BigDecimal::compareTo)
.orElseThrow(() -> new IllegalArgumentException("All values are null"));
Run Code Online (Sandbox Code Playgroud)
或者正如霍尔格在评论中提到的那样,.min(BigDecimal::compareTo)你可以使用.min(Comparator.naturalOrder())
BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
.filter(Objects::nonNull)
.min(Comparator.naturalOrder())
.orElseThrow(() -> new IllegalArgumentException("All values are null"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |