在列表中查找最大和最小双精度值

2022-09-05 00:28:56

我有以下双精度值列表:

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.016.016.092.0max=92.0

你知道怎么解决这个问题吗?


答案 1

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

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


答案 2

怎么样:

double max = items.stream().mapToDouble(Double::doubleValue).max().getAsDouble();//16.0
double min = items.stream().mapToDouble(Double::doubleValue).min().getAsDouble();//-6.0

推荐