java – 对列表进行排序,同时保持一些元素始终位于顶部

我们有一个List< Country>它按字母顺序保存按国家/地区名称排序的国家/地区列表.

 class Country {
   int id;
   String countryCode;
   String countryName;
 }

Country是一个实体对象,我们无权访问源(它位于许多应用程序共享的jar文件中).

现在我想修改列表,使国家名称“美国”和“英国”排在第一位,列表的其余部分按字母顺序排列.

最有效的方法是什么?

最佳答案
Collections.Sort(collection, Comparator)结合使用创建自己的comparator.这与普通比较器的不同之处在于,您必须明确优先选择您最想要的条目.

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main(){
        List<Country> list = new ArrayList<>();
        list.add(new Country("Belgium"));
        list.add(new Country("United Kingdom"));
        list.add(new Country("Legoland"));
        list.add(new Country("Bahrain"));
        list.add(new Country("United States of America"));
        list.add(new Country("Mexico"));
        list.add(new Country("Finland"));


        Collections.sort(list, new MyComparator());

        for(Country c : list){
            System.out.println(c.countryName);
        }
    }
}

class Country {
    public Country(String name){
        countryName = name;
    }

    int id;
    String countryCode;
    String countryName;

}

class MyComparator implements Comparator<Country> {
    private static List<String> important = Arrays.asList("United Kingdom", "United States of America");

    @Override
    public int compare(Country arg0, Country arg1) {
        if(important.contains(arg0.countryName)) { return -1; }
        if(important.contains(arg1.countryName)) { return 1; }
        return arg0.countryName.compareTo(arg1.countryName);
    }
}

输出:

United States of America
United Kingdom
Bahrain
Belgium
Finland
Legoland
Mexico

我一开始就误读了你的问题(或者它被添加为忍者编辑)所以这里是更新版本.

转载注明原文:java – 对列表进行排序,同时保持一些元素始终位于顶部 - 代码日志