2014-02-14 95 views
1

我有一些对象的ArrayList中包含该值如何排序ArrayList比较距离当前位置的距离?

String name 
String latitude 
String longitude 

我能找回我的当前位置,纬度,经度。现在我的问题是我怎么能排序这个ArrayList比较我的当前位置和该ArrayList的对象的位置之间的距离?我可以使用Comparator按字母顺序对arrayList进行排序,但如何进行这种排序?

+0

使用自定义的比较和使用'Location.distanceBetween' – njzk2

+0

创建'比较器“,并在那里写入必要的比较逻辑。可能需要将您的位置(经度和纬度)转换为数字对象,例如使用'BigDecimal',然后执行必要的操作。 –

+0

可以someOne给我一些代码片段作为例子? – Reyjohn

回答

3

假设你有一个名为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)); 
    } 
}