当前位置: 首页 > 面试题库 >

按多个字段对对象列表进行排序

程举
2023-03-14
问题内容

我有一个Java对象列表,希望根据多个字段进行排序。

public class graduationCeremony {
    String campus;
    String faculty;
    String building;
}

是否可以使用ComparatorComparable接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在ORDER BY campus, faculty, building)进行排序


问题答案:

您的比较器如下所示:

public class GraduationCeremonyComparator implements Comparator<GraduationCeremony> {
    public int compare(GraduationCeremony o1, GraduationCeremony o2) {
        int value1 = o1.campus.compareTo(o2.campus);
        if (value1 == 0) {
            int value2 = o1.faculty.compareTo(o2.faculty);
            if (value2 == 0) {
                return o1.building.compareTo(o2.building);
            } else {
                return value2;
            }
        }
        return value1;
    }
}

基本上,只要到目前为止已比较的属性相等(== 0),它就会继续比较类的每个连续属性。



 类似资料:
  • 问题内容: 我有一个从排序的csv创建的以下列表 我实际上想按两个条件对列表进行排序:首先按字段1中的值,然后按字段2中的值。我该怎么做? 问题答案: 像这样:

  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

  • 我有以下代码: 我的问题是我想让我的列表按多个东西排序: 1。)将它们分组为未来事件和过去事件(通过检查ystem.current毫秒()是否大于结束时间戳)2。)通过开始升序排序未来事件3。)通过结束降序排序过去事件 我可以用Java 8 Lambda来做这件事吗?或者我需要另一种排序项目的方法吗?

  • 问题内容: 我有一个清单清单: 如果要按一个元素(例如,高/短元素)排序,可以通过进行。 如果我想作为排序依据两个高大和颜色,我可以为每个元素做排序两次,一次,但有一个更快的方法? 问题答案: 键可以是返回元组的函数: 或者,你可以使用来实现相同的效果(速度更快,并且避免了Python函数调用): 并请注意,你可以在此处使用而不是使用,然后重新分配:

  • 我有一个物品清单,比如学生。学生有名字、中间名和姓氏` 假设在本例中,每个字段都可以为空。我想对列表进行排序,以便将所有空字段移到列表的末尾,并将所有非空字段移到列表的顶部。 我不需要基于实际的非空值进行排序。 例子: 有可能只有一个比较器来实现这一点,还是我需要单独的比较器?

  • 问题内容: 从这个原始问题开始,我将如何对多个字段进行排序? 使用这种略微适应的结构,我该如何对城市(升序)和价格(降序)进行排序? 我喜欢这个事实,而不是给出一个提供通用方法的答案。在计划使用此代码的地方,我将必须对日期以及其他内容进行排序。“灌注”物体的功能似乎很方便,即使有点麻烦。 我试图将这个答案构建成一个很好的通用示例,但是我运气不高。 问题答案: 这是一个“优化”版本。它进行了更多的预