使用比较器排序列表出错



我正在尝试根据我的名称属性排序对象列表。我创建了一个比较器,我注意到它没有排序。如果有任何错误,请告知。

List<Country> countryList = new ArrayList<Country>();
Country country1 = new Country("TEST1","Washington");
Country country2 = new Country ("TEST10", New Delhi");
Country country3= new Country ("TEST9", London");
countryList.add(country1);
countryList.add(country2);
Collections.sort(countryList,new Comparator<Country>() {
            public int compare(Country o1, Country o2) {
                return o1.getName().compareTo(o2.getName());
            }
});

我得到的应该是另一种方式。

    TEST1 : Washington
    TEST10 : New Delhi
    TEST9 : London
预计

    TEST1 : Washington
    TEST9 : London
    TEST10 : New Delhi

您正在尝试按名称排序。但是名称是TEST1, TEST10和TEST9。当你比较这个时,你会得到字母顺序:

TEST1
TEST10
TEST9

你可以试试下面的代码:

Collections.sort(countryList,new Comparator<Country>() {
                    public int compare(Country o1, Country o2) {
                        if (o1.getName().length() > o2.getName().length()) return 1;
                        if (o1.getName().length() < o2.getName().length()) return -1;
                        return o1.getName().compareTo(o2.getName());
                    }
        });

按字母顺序排列TEST10在TEST9之前

String compareTo使用lexicographically比较字符串,但您的逻辑需要比较字符串长度

Collections.sort(countryList,new Comparator<Country>() {
            public int compare(Country o1, Country o2) {
                if (o1.getName().length() > o2.getName().length()) return 1;
                if (o1.getName().length() < o2.getName().length()) return -1;
                return o1.getName().compareTo(o2.getName());
            }
});

最新更新