我有这个类存储坐标的纬度和经度以及距中心的距离。在我的算法中的某个时刻,我有一个这些坐标的列表,我想按它们距中心的距离对它们进行排序。因此,我实现了Comparable接口及其compareTo方法。
public class Coordinate implements Comparable<Coordinate> {
private Double lat;
private Double lon;
private Double distanceCenter;
protected Coordinate(Double lon, Double lat, Double distanceFromCenter) {
this.lat=lat;
this.lon=lon;
this.distanceCenter=distanceFromCenter;
}
public Double getDistanceFromCenter() {
return distanceFromCenter;
}
@Override
public int compareTo(Coordinate compared) {
return (int) ((this.distanceCenter) - (compared.getDistanceCenter()));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,有时两点之间的差异太小(几乎为零),java会抛出一个
java.lang.IllegalArgumentException: Comparison method violates its general contract
Run Code Online (Sandbox Code Playgroud)
我解决了这个问题,只需将每个距离乘以一个非常大的数字,以避免任何“重要性损失”效应
@Override
public int compareTo(Eq compared) {
return (int) ((this.distanceCenter*1000000000000000.0) (compared.getDistanceCenter()*1000000000000000.0));
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更优雅的方法来解决此类问题或者我是否做错了什么