Как отсортировать массив по его двойному атрибуту?

У меня есть ListActivity, заполненный следующим объектом Array:

public class VideoLocation {

    public String deleted_at = null;
    public int documentary_video_length = -1;
    public int id = -1;
    public double latitude = 0d;
    public double longitude = 0d;
    public int position = -1;
    public String updated_at = null;
    public String name = null;
    public String text = null;
    public String documentary_video_url = null;
    public String documentary_thumbnail_url = null;
    public String audio_text_url = null;
    public Footage[] footages = null;

    public VideoLocation(){

    }

Мне нужно отсортировать ListActivity на основе расстояния между местоположением и пользователем. У меня нет проблем с сортировкой строки «имя» по алфавиту, я использую этот метод :

public void sortAZ(){
    Arrays.sort(videoLocations, new Comparator<VideoLocation>() {

        @Override
        public int compare(VideoLocation lhs, VideoLocation rhs) {
            return lhs.name.compareTo(rhs.name);
        }
    });
}

, но этот метод нельзя использовать для типа данных «двойной», который мне нужен для «широты» и «долгота». Кроме того, для объекта VideoLocation отсутствует атрибут «расстояние».

Как я могу разобраться, даже если я могу рассчитать расстояние между местоположением и пользователем?

ОБНОВЛЕНИЕ

ЭТО ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ! РАБОТАЕТ КРАСИВО

public void sortNearby(){
        Arrays.sort(videoLocations, new Comparator<VideoLocation>() {

            @Override
            public int compare(VideoLocation lhs, VideoLocation rhs) {

                double lat = location.getLatitude();
                double lng = location.getLongitude();

                double lat1 = lhs.latitude;
                double lng1 = lhs.longitude;

                double lat2 = rhs.latitude;
                double lng2 = rhs.longitude;

                double lhsDistance = countDistance(lat,lng,lat1,lng1);
                double rhsDistance = countDistance(lat,lng,lat2,lng2);
                if (lhsDistance < rhsDistance) 
                    return -1;
                else if (lhsDistance > rhsDistance) 
                    return 1;
                else return 0;
            }
        });
    }

public double countDistance(double lat1,double lng1, double lat2, double lng2)
    {
        Location locationUser = new Location("point A");
        Location locationPlace = new Location("point B");
        locationUser.setLatitude(lat1);
        locationUser.setLongitude(lng1);
        locationPlace.setLatitude(lat2);
        locationPlace.setLongitude(lng2);

        double distance = locationUser.distanceTo(locationPlace);

        return distance;
    }
0
задан hectichavana 27 April 2012 в 15:33
поделиться