java - 在列表中查找最大和最小 double 值

标签 java java-8 java-stream comparator

我有以下 double 值列表:

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.0min=-6.0。我原以为最大值是 16.0。后来我把16.0改成92.0就可以了;它给了我 max=92.0

你知道怎么解决吗?

最佳答案

您不想使用字符串进行比较,而是通过双元素的自然顺序进行比较,即 Comparator.naturalOrder() 而不是 Comparator.comparing(String::valueOf).

通过字符串比较将导致比较字符,因为 9("9.0")的字符值大于 1 (of "16.0") 你得到了你看到的结果。将 "16.0" 更改为 "92.0" 将导致 .2 进行比较(因为第一个字符相等),因此 "92xx" 大于 "9.xx"

关于java - 在列表中查找最大和最小 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51728273/

相关文章:

java - 使输入参数成为强制 JAX-WS

java - sencha extjs GridPanel SaveState 格式

java.lang.illegalstateException 无法转发。响应已提交 jsp

java - Java排序列表,然后使用Stream API从列表中获取子列表

java - 仔细检查包容性 OR 语句

java - 在 Java 中,我可以将日期和时间转换为不带时区的 ISO 8601 格式的字符串吗?

Java 8 - 流 - 收集时更新值

java - 每次调用 next() 时终止流

java - 如何使用 Java 流重新组合树状图

java - 方法引用可以用来访问静态方法吗?