collections.Sort带有比较器返回常数



想法的想法有多糟糕?

Collections.sort(list, descendingComparator );

其中参数为:

ArrayList<Map> list;
descendingComparator = new Comparator<Map>() {
    @Override
    public int compare(Map lhs, Map rhs) {
        return -1;
    }
};

似乎可以工作,步骤的数量不是无限的,但是我担心这是OS版本依赖。

这是一个坏主意,因为compare()方法应该两种方式起作用:如果a < b,则该比较器将无法做到的b > a。如果compare()不起作用,则结果是不确定的行为。它可能起作用,可能行不通,也许不一致。

理想的方法是将另一个比较器包裹在逆转的比较中:

final Comparator<Map> someOtherComparator = ...;
descendingComparator = new Comparator<Map>() {
    @Override
    public int compare(Map lhs, Map rhs) {
        // Note the parameters are swapped here
        return someOtherComparator.compare(rhs, lhs);
    }
};

您也可以这样做:

Collections.sort(list, comparator);
Collections.reverse(list);

最后,如果您的列表元素具有自然订购(实现ComparableMap没有),则可以执行此操作:

Collections.sort(list, Collections.reverseOrder());

最新更新