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

排序列表在三个对象之后

施茂
2023-03-14

我有一个列表列表

对象[]具有以下对象

  • 日期“dd.MM.yyyy”

我能够在dd.MM之后对列表进行排序。yyyy然后在字符串之后。现在我想在时间之后对它进行排序,结果也应该排序为“dd.MM.yyyy”,排序为“String”,排序为“time”。

Collections.sort(resultList, new Comparator<Object[]>() {
    public int compare(Object[] o1, Object[] o2) {
        int dateComparison = (( o2[0]).compareTo(o1[0]));
        return dateComparison == 0 ? ( o1[1]).compareTo( o2[1]) : dateComparison;
    }
});

我怎样才能让它工作?


共有3个答案

公羊曜灿
2023-03-14

将您的Date和Time对象合并到一个java.util.Date中,然后使用String作为HashMap中的键。从这里,您可以对列表进行排序

顺便说一句:如果您使用的是数组列表或列表列表,那么很可能是代码气味。

裴俊能
2023-03-14

试试这个。

resultList.sort(
    Comparator.comparing((Object[] a) -> (Date)a[0])
        .thenComparing(a -> (String)a[1])
        .thenComparing(a -> (Date)a[2]));
元彦君
2023-03-14

你的问题是:错误的抽象。

当你有属于一起的“数据”时,你就把它变成了一个类。

含义:不是用数据保留三个列表,而是创建一个合理地“包装”这三个信息的类。然后你创建一个该类的数组/列表。

因为这样您就可以很容易地创建不同的比较器对象来比较该类的对象——例如通过查看不同的字段。

换句话说:你正在(或多或少地)用平面数据编写“过程”代码,以及“结合”平面数据的“外部”代码。但是,当使用Java等OO语言时,应该努力创建有用的抽象。

但如果您想继续使用您的方法,请查看以下伪代码:

int dateComparison = o2[0].compareTo(o1[0]);
if (dateComparison != 0) return dateComparison;

int stringComparison = o2[1].compareTo(o1[1]);
if (stringComparison != 0) return stringComparison;

int secondDateComparison = o2[2].compareTo(o1[2]);
return dateComparison;

(显然,你需要在这里和那里进行一些转换,但由于你的输入没有使用它们,我也忽略了这一点)

 类似资料:
  • 我的数据库中有一些虚拟数据。我试图执行mongodb聚合函数,以便根据给定的标题进行排序 到目前为止,我能够提出的查询是这个,下面是mongodb返回的内容。 db。测验聚合([{$unwind:“$fields”},{$match:{“fields.title”:“firstName”},{$sort:{“fields.value”:1}}}]) 但是,返回的数据集的结果应该包括字段列表中的其他

  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。

  • 我有“MainClass”类的对象列表,它包含“Question”类的对象列表,它包含Option类的对象列表。如何按“Id”对“MainClass”类列表进行排序,以及按“Id”对“Option”类列表进行排序? 假设,

  • 问题内容: 如何排序日期对象列表?例如,我有未排序的日期对象列表。如何从此列表中获取最大值/最小值? 问题答案: 使用列表排序方法: 有关如何排序的更多信息。

  • 我有一个过程对象列表,如下所示 我的程序课就像 我想基于以下条件对对象进行排序和分组。 应根据过程名称对所有过程进行分组。 过程必须按过程日期降序排列。[日期列表中的第一个元素,即 分组在一起的相同过程应按日期降序排列。 最终结果必须是, 我能够使用比较器和旧的Java代码实现这一点。是否可以使用java8流、收集器和分组来实现相同的功能?

  • 我有一个对象列表,我需要按其中一个对象属性对其进行排序。 我可以用下面的代码按升序排序 但是,这是按升序排序列表,而我需要做的是按降序排序。在对对象列表进行排序时,这可能吗?