[英]Collections.sort with Comparator returning constant
使用ArrayList重新排序的想法有多糟糕?
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.