2014-02-14 3 views
1

У меня есть ArrayList некоторых объектов, содержащие эти значения,Как отсортировать ArrayList, сравнивая расстояние от текущего местоположения?

String name 
String latitude 
String longitude 

я могу получить мою текущее местоположение, широту, долготу. Теперь мой вопрос заключается в том, как я могу отсортировать этот 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)); 
    } 
} 
Смежные вопросы