java列表sort排序,比较器用lamda表达式表示为什么必须返回int,返回double怎么办
时间: 2024-10-28 09:12:08 浏览: 22
在Java中,`List.sort()`方法通常用于对集合元素进行自然顺序排序,比如整数、字符串等。如果你想要自定义排序规则,可以使用`Comparator`接口,而`Comparator.comparingDouble()` 或 `Comparator.comparingInt()` 等方法允许你指定基于属性值的比较。
当你使用`Comparator`的lambda表达式时,它需要返回一个整型结果,因为`sort()`方法期望的是两个元素之间的比较结果,这个结果通过`compare()`方法提供,该方法应该返回:
- 正数:如果第一个元素大于第二个元素。
- 负数:如果第一个元素小于第二个元素。
- 零:如果两个元素相等。
例如,对于double类型,你需要计算并转换成整数形式,如取差分的绝对值,再进行比较:
```java
list.sort(Comparator.comparingDouble(e -> Math.abs(e.getDoubleProperty() - otherValue)));
```
但如果直接返回`double`,`sort()`会抛出`ClassCastException`,因为`compare()`方法期望的是`Comparable`类型的`int`结果。如果你想保持原始double精度,那么就不能直接使用`Comparator.comparingDouble`,而是需要编写一个实现了`Comparator<Double>`的匿名内部类,其中重写了`compareTo()`方法来处理double比较。
```java
Comparator<Double> doubleComparator = (d1, d2) -> {
int result = Double.compare(d1, d2);
// 如果需要其他比较策略,如降序
return result * -1;
};
list.sort(doubleComparator);
```
阅读全文