問題描述:
自定義排序一個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; } } });