2011-05-05 140 views

回答

203

下面是一個方法你list

Collections.sort(list); 
Collections.reverse(list); 

或者你也可以實現自己的Comparator進行排序並消除反向步:

Collections.sort(list, new Comparator<Long>() { 
    public int compare(Long o1, Long o2) { 
     return o2.compareTo(o1); 
    } 
}); 

或者甚至更簡單地使用Collections.reverseOrder(),因爲您只能倒轉:

Collections.sort(list, Collections.reverseOrder()); 
+5

'L1> L2? -1:l1 == l2? 0:1'這段代碼很荒謬。然後使用'o1.compareTo(o2)'。 – ilalex 2011-05-05 08:54:54

+3

@ilya:哦是的,好點,雖然它需要在這裏'o2.compareTo(o1)':) – WhiteFang34 2011-05-05 08:57:58

+0

這似乎是工作和一個更簡單的解決方案。 – Jango 2015-08-08 08:11:23

1

通過使用Collections.sort()與提供降序的比較器。 請參閱Javadoc的Collections.sort

25
Comparator<Long> comparator = Collections.reverseOrder(); 
Collections.sort(arrayList, comparator); 
+0

僅在該變量聲明中使用泛型參數。 – 2011-05-05 09:35:20

2

來實現我們自己的比較如下

Collections.sort(lst,new Comparator<Long>(){ 
       public int compare(Long o1, Long o2) { 
        return o2.compareTo(o1); 
       } 
      }); 
2

下面的方法將降序排列的列表,也較普遍的辦法處理「」值,以防萬一,如果您有任何空值,那麼Collections.sort()將引發NullPointerException異常

 Collections.sort(list, new Comparator<Long>() { 
      public int compare(Long o1, Long o2) { 
        return o1==null?Integer.MAX_VALUE:o2==null?Integer.MIN_VALUE:o2.compareTo(o1); 

     } 
    }); 
16

您可以使用下面給出的代碼;

Collections.sort(list, Collections.reverseOrder()); 

,或者如果你打算使用自定義的比較,因爲它是低於

Collections.sort(list, Collections.reverseOrder(new CustomComparator()); 

凡CustomComparator是一個比較類,這是目前在列表中的對象進行比較給你可以使用。

7

的Java 8

以及這樣做在Java 8是這麼多的樂趣,更容易

Collections.sort(variants,(a,b)->a.compareTo(b)); 
Collections.reverse(variants); 

Lambda表達式搖滾這裏!

的情況下,你需要多行的邏輯比較一個b你可以寫這樣的

Collections.sort(variants,(a,b)->{ 
    int result = a.compareTo(b); 
    return result; 
}); 
+0

我認爲如果我們將此更改爲b.compareTo(a),我們不需要反轉該集合。 – zawhtut 2015-04-18 13:51:53

+0

@zawhtut,完全正確!剛剛提到reverse()以便知道選項,選擇是你的 – azerafati 2015-04-18 14:24:47

0

您也可以排序與TreeSet而不是comparatorArrayList。以下是我之前針對整數數組的問題的一個示例。我使用「數字」作爲ArrayList的佔位符名稱。


 import.java.util.*; 
     class MyClass{ 
     public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     ArrayList<Integer> numbers = new ArrayList<Integer>(); 

     TreeSet<Integer> ts = new TreeSet<Integer>(numbers); 
     numbers = new ArrayList<Integer>(ts); 
     System.out.println("\nThe numbers in ascending order are:"); 
     for(int i=0; i<numbers.size(); i++) 
     System.out.print(numbers.get(i).intValue()+" "); 
     System.out.println("\nThe numbers in descending order are:"); 
     for(int i=numbers.size()-1; i>=0; i--) 
     System.out.print(numbers.get(i).intValue()+" "); 
    } 
} 
+0

但是'TreeSet'不存儲重複值。 – 2016-10-03 17:19:39