我有以下数组对象填充的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;
}
我刚刚更新了我的问题,请看看..谢谢 – hectichavana 2012-04-27 14:53:15
正如Igor F.所说,你的新代码是错误的:你需要计算'lhs'和'rhs'的经度和纬度(在你' ),然后调用'countDistance(lat,lng,lat1,lng1)'和'countDistance(lat,lng,lat2,lng2)'(注意:'lat1'),然后调用另一个的纬度和经度。 'lng'1还不存在,但是当你同时计算lats和两个lng时!)。 – 2012-04-27 15:10:03
我真的不知道它,你能提供一个改进或更正我刚发布的代码吗?这将有所帮助。 Thx – hectichavana 2012-04-27 15:26:24