collections.sort()使用時注意的問題


問題描述:

自定義排序一個List<Pair<Integer, Integer>>,根據pair的key由小到大排序,如果相同,則根據pair的value由大到小排序。

最開始寫的比較器如下:

Collections.sort(list, new Comparator<Pair<Integer, Integer>>() {
            @Override
            public int compare(final Pair<Integer, Integer> o1, final Pair<Integer, Integer> o2) {
                if(o1.getKey() != o2.getKey())
                    return o1.getKey() - o2.getKey();
                else{
                    return o2.getValue() - o1.getValue();
                }
            }
        });

但是由於Pair的getKey()和getValue()方法返回的是Object對象,是不能直接比較兩個對象的,這里耽誤了好久- -。

正確的寫法是新建變量存儲Pair的key和value值,再進行比較。

Collections.sort(list, new Comparator<Pair<Integer, Integer>>() {
            @Override
            public int compare(final Pair<Integer, Integer> o1, final Pair<Integer, Integer> o2) {
                int x1 = o1.getKey();
                int y1 = o1.getValue();
                int x2 = o2.getKey();
                int y2 = o2.getValue();
                if(x1 != x2)
                    return x1 - x2;
                else{
                    return y2 - y1;
                }
            }
        });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM