java - 在列表中查找最大和最小双精度值
问题描述
我有以下双值列表:
items {9.0, 4.0, 16.0, -6.0, 5.0}
我想找到最大值和最小值,为此我做了:
double max = items.stream().max(Comparator.comparing(String::valueOf)).get();
double min = items.stream().min(Comparator.comparing(String::valueOf)).get();
我得到的结果是max=9.0
和min=-6.0
。我期待最大值是16.0
. 后来,我改用16.0
它92.0
,它起作用了;它给了我max=92.0
你知道怎么解决吗?
解决方案
您不想使用字符串进行比较,而是通过双元素的自然顺序进行比较,即Comparator.naturalOrder()
代替Comparator.comparing(String::valueOf)
.
通过字符串比较将导致字符被比较,并且由于 (of ) 的字符值9
大于"9.0"
( 1
of "16.0"
),您会得到您看到的结果。更改"16.0"
为"92.0"
将导致.
与2
(因为第一个字符相等)进行比较,因此"92xx"
大于"9.xx"
。
推荐阅读
- node.js - 从 api 获取数据时出现空白屏幕
- reactjs - 如何让 API 调用等到我们获得所需的数据?
- vaadin - Vaadin TextField 的值在快捷方式侦听器中不可用
- php - 在我的联系表格中发送消息没有任何意义
- javascript - Jest vue3:SyntaxError:意外的令牌“导出”(信号)
- windows - 如何获取不包含特定类型文件的文件夹/子文件夹列表?
- gradle - 在 Android Studio 中允许 HTTP 下载
- google-api - googleapi servicenetworking上的terraform后端500错误
- c# - 如何使用反射获取没有获取/设置的属性?
- django - 在 pycharm 中运行 django 时出现错误 (root) Additional property django is not allowed