Arrays.sort在java中不起作用

Arrays.sort在java中不起作用,java,android,sorting,Java,Android,Sorting,我有一个名为Company的自定义类,它的字段是纬度和经度。 我想根据距离当前位置的距离对它们进行排序,但这似乎不起作用 我仔细检查了所有数据,它们都是正确的,但由于某种原因,排序似乎不起作用 代码是: currentCompanies=AllCompanies.sortByDistanceFromOwnLocation(currentCompanies, AppConstant.userLatitude, AppConstant.userLongitude); 这称之为: public st

我有一个名为Company的自定义类,它的字段是纬度和经度。 我想根据距离当前位置的距离对它们进行排序,但这似乎不起作用

我仔细检查了所有数据,它们都是正确的,但由于某种原因,排序似乎不起作用

代码是:

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
    值;不应该由用户来修剪字符串并解析它们
  • 您的异常处理:假设我是对的,您不应该像现在这样忽略异常
  • 您的诊断:如果确实发生异常,您应该始终记录它,无论以后做什么

您可以使用名为debugger的工具检查
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