我有一些包含此值的对象的ArrayList
String name
String latitude
String longitude
我可以检索我当前的位置,纬度,经度。现在我的问题是如何将这个arraylist与我当前位置和该arrayList对象位置之间的距离进行排序?我可以使用Comparator按字母顺序对arrayList进行排序,但是如何进行这种排序?
答案 0 :(得分:5)
假设您有一个名为Point
的类,如下所示:
class Point {
double latitude;
double longitude;
}
比较器可以如下实现:
class DistanceFromMeComparator implements Comparator<Point> {
Point me;
public DistanceFromMeComparator(Point me) {
this.me = me;
}
private Double distanceFromMe(Point p) {
double theta = p.longitude - me.longitude;
double dist = Math.sin(deg2rad(p.latitude)) * Math.sin(deg2rad(me.latitude))
+ Math.cos(deg2rad(p.latitude)) * Math.cos(deg2rad(me.latitude))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
return dist;
}
private double deg2rad(double deg) { return (deg * Math.PI / 180.0); }
private double rad2deg(double rad) { return (rad * 180.0 / Math.PI); }
@Override
public int compare(Point p1, Point p2) {
return distanceFromMe(p1).compareTo(distanceFromMe(p2));
}
}