首页 > 解决方案 > 在列表中查找最大和最小双精度值

问题描述

我有以下双值列表:

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.092.0,它起作用了;它给了我max=92.0

你知道怎么解决吗?

标签: javajava-8java-streamcomparator

解决方案


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

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


推荐阅读