У меня есть ListActivity населенного следующего массива объект:Как сортировать массив по его двойному атрибуту?
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 нет атрибута «расстояние».
Как я могу разобраться, даже когда я могу рассчитать расстояние между местоположением и пользователем?
UPDATE
ЭТО окончательное решение! Работает как шарм
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;
}
Я только что обновил свой вопрос, PLS посмотрите .. спасибо – hectichavana
Как говорит Игорь Ф., ваш новый код глючит: вам нужно вычислить широту и долготу как 'lhs', так и' rhs' (на тот момент, перечислив широту одного и долготу другого!), а затем вызовите 'countDistance (lat, lng, lat1, lng1)' и 'countDistance (lat, lng, lat2, lng2)' (примечание: 'lat1' и 'lng'1 еще не существует, но они будут, когда вы будете вычислять как латы, так и обе lngs!). –
Я еще не понял, не могли бы вы улучшить или исправить код, который я только что написал? Это было бы полезно. Thx – hectichavana