如何对ArrayList进行排序,比较当前位置的距离?

时间:2014-02-14 21:41:37

标签: java

我有一些包含此值的对象的ArrayList

String name
String latitude
String longitude

我可以检索我当前的位置,纬度,经度。现在我的问题是如何将这个arraylist与我当前位置和该arrayList对象位置之间的距离进行排序?我可以使用Comparator按字母顺序对arrayList进行排序,但是如何进行这种排序?

1 个答案:

答案 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));
    }
}