想法的想法有多糟糕?
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);
最后,如果您的列表元素具有自然订购(实现Comparable
,Map
没有),则可以执行此操作:
Collections.sort(list, Collections.reverseOrder());