我有以下 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.0
和 min=-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/