簡體   English   中英

具有Comparator返回常量的Collections.sort

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM