gpt4 book ai didi

java - 对列表进行排序,同时将一些元素始终放在顶部

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:23 24 4
gpt4 key购买 nike

我们有一个 List<Country>其中包含按字母顺序排列的国家/地区列表 countryName .

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

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

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

最有效的方法是什么?

最佳答案

创建您自己的 comparator结合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 - 对列表进行排序,同时将一些元素始终放在顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21011662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com