我有这样的比较:
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))最初,我试图设置任何最终为空值的任意上限值,但我不允许这样做。这意味着,我需要摆脱这一行比较解决方案的冗长的if-否则-如果,我真的不喜欢。是否有一种优雅的方法来处理空案例场景。如有任何建议,将不胜感激。谢谢。
发布于 2020-06-28 15:30:38
我认为你可以像这样使用Stream.of:
BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
.filter(Objects::nonNull)
.min(BigDecimal::compareTo)
.orElse(null); // Or return a default value如果所有输入都为null,则可以抛出异常:
BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
.filter(Objects::nonNull)
.min(BigDecimal::compareTo)
.orElseThrow(() -> new IllegalArgumentException("All values are null"));或者正如霍尔格在评论中提到的那样,您可以使用.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"));发布于 2020-06-28 15:24:45
假设我理解你的问题,这似乎是一个你可以用三元的地方。喜欢,
BigDecimal minLimit = firstLimit != null ?
firstLimit.min(secondLimit.min(thirdLimit)) :
secondLimit.min(thirdLimit);或者,一个缺省的初始值和一个if就足够了(比较的顺序对于找到最小值并不重要)。喜欢,
BigDecimal minLimit = secondLimit.min(thirdLimit);
if (firstLimit != null) {
minLimit = minLimit.min(firstLimit);
}发布于 2020-06-28 15:27:23
还可以使用java 8中的可选。
BigDecimal minLimit = Optional.ofNullable(firstLimit)
.map(fl->fl.min(secondLimit.min(thirLimit)))
.orElse(secondLimit.min(thirLimit));https://stackoverflow.com/questions/62624498
复制相似问题