当前位置: 首页 > 知识库问答 >
问题:

一个操作数为null的BigDecimal min()方法[duplicate]

訾朗
2023-03-14

我有这样的比较:

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-else-if和我真的不喜欢的时间里,摆脱这一行比较解决方案。是否有一种优雅的方式来处理空案例场景。如有任何建议,将不胜感激。非常感谢。

共有3个答案

华星文
2023-03-14

您也可以使用可选的java 8

BigDecimal minLimit = Optional.ofNullable(firstLimit)
                              .map(fl->fl.min(secondLimit.min(thirLimit)))
                              .orElse(secondLimit.min(thirLimit));
孙斌
2023-03-14

假设我理解你的问题,这似乎是一个你可以使用三元组的地方。喜欢

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);
}
公孙新觉
2023-03-14

我想你可以使用流。像这样的

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"));

或者正如霍尔格在评论中提到的,而不是。min(BigDecimal::compareTo)您可以使用。最小值(Comparator.naturalOrder())

BigDecimal minLimit = Stream.of(firstLimit, secondLimit, thirdLimit)
        .filter(Objects::nonNull)
        .min(Comparator.naturalOrder())
        .orElseThrow(() -> new IllegalArgumentException("All values are null"));
 类似资料:
  • 这看起来有点奇怪,因为orElse方法使用的变量不在lambda的范围内。我能知道最好的方法吗? 也许我应该说说为什么我选择了可选的。我希望我的团队的开发人员明白,即使字符串A是首选的,它可能是空的,并且必须处理,因为代码的这一部分是敏感的。字符串B仅用于记录的遗留部分。希望这能澄清我对这种方法的意图。

  • 本文向大家介绍PHP数组操作——获取数组最后一个值的方法,包括了PHP数组操作——获取数组最后一个值的方法的使用技巧和注意事项,需要的朋友参考一下 php开发过程中,可能经常需要对取出的数组要获取数组的最后健或值。在这里呐喊教程总结了三个方法,并且跟据他们三个方法在一些情况下如何使用的条件限制进行了说明。 总体来说,php的内置函数end还是最好的方法的了。大家可以测试下。 PHP取值很容易,可以

  • 本文向大家介绍用js封装一个对cookie操作的方法相关面试题,主要包含被问及用js封装一个对cookie操作的方法时的应答技巧和注意事项,需要的朋友参考一下

  •  KAG 的操作方法说明如下。 Note  这是通常情况下的操作。虽然根据游戏的不同,也会有些功能不开放,不过把这个直接复制粘贴到游戏说明书里也无所谓吧(汗) 基本的操作 「鼠标左键单击」或「滚轮向下滚动」或「确认键」或「空格键」 显示下一段文字、选择选项、按下按钮、选择勾选框等动作 「鼠标右键单击」或「ESC 键」 打开历史记录,或呼叫右键菜单 「↑」「↓」 或 「←」「→」 或 「TAB」「S

  • 本文向大家介绍php 删除一维数组中某一个值元素的操作方法,包括了php 删除一维数组中某一个值元素的操作方法的使用技巧和注意事项,需要的朋友参考一下 1. 自己写for循环 从array里去掉$tmp这个元素的值 代码 此时 要重置索引,加上一句 此时结果 array_merge()也可以实现同样的效果 此时结果 2.优先使用php自带函数,因为那是用C实现的,比自己写效率高。 使用array_

  • 问题内容: 我有一堂课,他们的功能上有一个乏味的重复模式,我想把这种模式变成装饰器。但事实是,此装饰器必须访问当前实例的某些属性,因此我想将其转换为此类中的方法。我有一些问题。 因此,这类似于我想要的: (1)这是问题所在。我想使用该方法来装饰该方法。但是我不知道如何使用当前实例中的方法作为装饰器。 有没有简单的方法可以做到这一点? 编辑:好的,答案很明显。正如Sven所说的那样,装饰器本身只是在