Arrays.sort在java中不起作用
我有一个名为Company的自定义类,它的字段是纬度和经度。 我想根据距离当前位置的距离对它们进行排序,但这似乎不起作用 我仔细检查了所有数据,它们都是正确的,但由于某种原因,排序似乎不起作用 代码是:Arrays.sort在java中不起作用,java,android,sorting,Java,Android,Sorting,我有一个名为Company的自定义类,它的字段是纬度和经度。 我想根据距离当前位置的距离对它们进行排序,但这似乎不起作用 我仔细检查了所有数据,它们都是正确的,但由于某种原因,排序似乎不起作用 代码是: currentCompanies=AllCompanies.sortByDistanceFromOwnLocation(currentCompanies, AppConstant.userLatitude, AppConstant.userLongitude); 这称之为: public st
currentCompanies=AllCompanies.sortByDistanceFromOwnLocation(currentCompanies, AppConstant.userLatitude, AppConstant.userLongitude);
这称之为:
public static Vector<Company> sortByDistanceFromOwnLocation(
Vector<Company> locations, final double myLatitude,
final double myLongitude) {
Comparator comp = new Comparator<Company>() {
@Override
public int compare(Company o, Company o2) {
float[] result1 = new float[3];
android.location.Location.distanceBetween(myLatitude,
myLongitude,
Double.parseDouble(o.getLatitude().trim()),
Double.parseDouble(o.getLongitude().trim()),
result1);
Float distance1 = result1[0];
float[] result2 = new float[3];
android.location.Location.distanceBetween(myLatitude,
myLongitude,
Double.parseDouble(o2.getLatitude().trim()),
Double.parseDouble(o2.getLongitude().trim()),
result2);
Float distance2 = result2[0];
return distance1.compareTo(distance2);
}
};
Collections.sort(locations, comp);
return locations;
}
并且仅针对以下id调用:
Compare between id :2 and 1
Compare between id :3 and 2
所有公司的数据如下:
12-24 17:00:51.318: I/System.out(19041): Company : 1 Latitude :37.9407699 Longitude:23.7489698
12-24 17:00:51.318: I/System.out(19041): Company : 2 Latitude :37.9407699 Longitude:23.7489698
12-24 17:00:51.318: I/System.out(19041): Company : 3 Latitude :37.9407699 Longitude:23.7489698
12-24 17:00:51.319: I/System.out(19041): Company : 4 Latitude :41,352979 Longitude:26,502281
12-24 17:00:51.319: I/System.out(19041): Company : 5 Latitude :41,352979 Longitude:26,502281
12-24 17:00:51.319: I/System.out(19041): Company : 6 Latitude :41,352979 Longitude:26,502281
12-24 17:00:51.319: I/System.out(19041): Company : 7 Latitude :37.0861346 Longitude:25.1608451
12-24 17:00:51.319: I/System.out(19041): Company : 8 Latitude :38.078994 Longitude:23.727481
ID1和ID2以及ID2和ID3之间的比较结果是0=>equal(这是正确的)。其他的根本不可比较
为什么会这样?现在我们可以看到纬度和经度的字符串值,我想我知道问题所在Double.parseDouble
将为如下字符串引发异常:41352979
我的猜测是,在某个地方,您捕获了异常
,并有效地忽略了它。当比较器尝试解析无效值时,在sort
方法期间引发该异常
需要解决的问题:
- 你的数据:我们不知道你从哪里得到的纬度和经度,但看起来它在数字表示方面并不“干净”
- 您的数据模型:
和Company.getLatitude
应该已经是Company.getLatitude
值;不应该由用户来修剪字符串并解析它们double
- 您的异常处理:假设我是对的,您不应该像现在这样忽略异常
- 您的诊断:如果确实发生异常,您应该始终记录它,无论以后做什么
Comparator#compare
方法中的问题。“它似乎不起作用”并不能很好地描述您所期望的和实际看到的之间的差异。除此之外,它看起来像Company.getLatitude()
和Company.getLatitude()
应更改为返回double
而不是String
…然后,一个简短但完整的程序演示问题将有所帮助。显示示例输入和输出数据的东西。(你真的需要使用Vector
而不是ArrayList
?)这不是一个简短但完整的程序来演示这个问题,是吗?它没有关于被比较公司的纬度/经度的任何信息,也没有比较结果。我们没有迹象表明所有公司中实际上有8家公司。。。基本上没有什么可以帮助我们的。你可以做很多事情来诊断,但目前我们帮不了你。谢谢,伙计,就这样。换,换。修正了。@ghostrider:我希望这不是你所做的全部-看看我的答案,我认为你应该考虑改变的事情。
Compare between id :2 and 1
Compare between id :3 and 2
12-24 17:00:51.318: I/System.out(19041): Company : 1 Latitude :37.9407699 Longitude:23.7489698
12-24 17:00:51.318: I/System.out(19041): Company : 2 Latitude :37.9407699 Longitude:23.7489698
12-24 17:00:51.318: I/System.out(19041): Company : 3 Latitude :37.9407699 Longitude:23.7489698
12-24 17:00:51.319: I/System.out(19041): Company : 4 Latitude :41,352979 Longitude:26,502281
12-24 17:00:51.319: I/System.out(19041): Company : 5 Latitude :41,352979 Longitude:26,502281
12-24 17:00:51.319: I/System.out(19041): Company : 6 Latitude :41,352979 Longitude:26,502281
12-24 17:00:51.319: I/System.out(19041): Company : 7 Latitude :37.0861346 Longitude:25.1608451
12-24 17:00:51.319: I/System.out(19041): Company : 8 Latitude :38.078994 Longitude:23.727481