当前位置: 首页 > 知识库问答 >
问题:

对列表进行排序,同时保持少数元素始终位于顶部

白光耀
2023-03-14

我们有一个<代码>列表

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

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

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

最有效的方法是什么?

共有2个答案

公冶高峯
2023-03-14

在< code >比较器中实现该规则。您可以使用< code>Collections.sort()对列表进行排序

宓毅庵
2023-03-14

结合 Collections.Sort(collection, 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);
    }
}

输出:

美国<br>英国<br>巴林<br>比利时<br>芬兰<br>乐高乐园<br>墨西哥

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

 类似资料:
  • 主要内容:算法总结及实现,优化算法在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排序后更容易分区好学生和坏学生; 一个保存了商品单价的数组,排序后更容易看出它们的性价比。 对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。 以从小到大排序为例,冒泡排序的整体

  • 我在一次编码竞赛中遇到了以下问题。我试了很多,但是一个私人测试用例总是因为错误的答案而失败,我无法弄清楚为什么我的以下方法会失败。我没有简单的解决方案来生成压力测试用例并进行比较。此外,也不会发表社论。所以,如果可能的话,我正在寻找一个人来指出我方法中的缺陷。 下面是对问题的详细描述,以及我迄今为止所做的尝试。 问题:有多个区域,您将根据每个区域的学生在各自区域中的排名获得分数。例如: 在上述数据

  • 问题内容: 如何将一个列表拆分为给定数量的列表,按顺序排列元素并将它们分配给子列表(因此不对列表进行分区)? 我想尽可能做到“不错”(使用Java 8功能或Guava或类似功能)。 示例列表: 应该分为3: 应该分成2个: 问题答案: 如果源列表支持有效的随机访问,则可以使用 例如

  • 问题内容: 我有一个在控制台窗口中运行的简单Python脚本。 如何确保控制台窗口始终位于顶部,并在可能时调整其大小? 问题答案: 要在cmd窗口中执行此操作,您可能必须调用许多win32调用。 使用win32gui.EnumWindows枚举所有窗口以获取窗口句柄 找到与您的程序运行方式匹配的“窗口标题”。例如,在我的系统上双击.py文件,窗口标题为“ C:\ Python26 \ python

  • 如何将列表拆分为给定数量的列表,按顺序获取元素并将它们分发到子列表(因此不对列表进行分区)? 我想尽可能“好”地做到这一点(使用 Java 8 功能或 Guava 或类似的东西。 示例列表: 应分为3部分: 应分为2部分:

  • 问题内容: 从经验上讲,似乎Python的默认列表排序器在传递元组列表时将按每个元组中的第一个元素进行排序。那是对的吗?如果不是,按元组的第一个元素对元组列表进行排序的正确方法是什么? 问题答案: 它会自动按元组中的第一个元素对元组列表进行排序,然后按第二个元素进行排序,依此类推,tuple([1,2,3])将排在tuple([1,2,4])之前。如果要覆盖此行为,请将一个callable作为第二