在三个对象之后对List <Object []>进行排序

tre*_*ree 2 java sorting collections

我有一份清单List<Object[]>.

Object []具有以下对象:

  • 日期"dd.MM.yyyy"
  • 日期"HH:mm".

我可以在之后dd.MM.yyyy和之后对列表进行排序String.现在我想在时间之后对它进行排序,结果也应该排序为"dd.MM.yyyy",排序"字符串",排序"时间".

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?

Gho*_*ica 6

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

如果您拥有属于一起的"数据",那么您可以将其转换为.

含义:您不是将三个列表与数据保持在一起,而是创建一个合理地"包裹"这三个信息的类.然后创建该类的数组/列表.

因为这样您就可以轻松创建不同的 Comparator对象来比较该类的对象 - 例如,通过查看不同的字段.

换句话说:您(或多或少)使用平面数据编写"程序"代码,以及"组合"平面数据的"外部"代码.但是当使用诸如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;
Run Code Online (Sandbox Code Playgroud)

(显然你需要在这里和那里进行一些演员表,但是由于你的输入没有使用它们,我也把它排除在外)