2011-05-05 12 views

cevap

203

İşte için tek yoldur kullanmak senin list:

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

Yoksa ters adımı kendi Comparator için sıralama üzerinde uygulamak ve ortadan kaldırabilir:

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

Ya da sadece daha fazla Collections.reverseOrder() kullanın, çünkü sadece geri dönüyorsunuz:

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

'l1> l2? -1: l1 == l2? 0: 1 'bu kod gülünç. O zaman o1.compareTo (o2) 'yi kullanın. – ilalex

+3

@ilya: oh evet, iyi bir nokta, o 'o2.compareTo olmalı (o1) 'burada :) – WhiteFang34

+0

Bu çalışıyor ve daha kolay bir çözüm gibi görünüyor. – Jango

1

Collections.sort(), azalan sırayı sağlayan bir karşılaştırıcı kullanarak. Collections.sort için Javadoc'a bakın.

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

Sadece bu değişken bildirimi üzerindeki bir jenerik argümanı ile. –

2

da

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

Aşağıdaki yaklaşım azalan sırada sıralamak olacaktır aşağıdaki gibi kendi Karşılaştırıcısı uygulamak ve daha genel bir yaklaşımı ihtimale eğer, 'boş' değerleri kolları sonra Collections.sort() atacağım, hiç boş değerlere sahip 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

Aşağıdaki kodu kullanabilirsiniz;

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

ya da bunu CustomComparator listede var nesneyi karşılaştıran bir karşılaştırma sınıftır

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

aşağıda verilmiştir şekilde kullanabileceğiniz özel karşılaştırıcı kullanacağız eğer.

7

Java 8

iyi java 8'de bunu böylece

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

Lambda ifadeleri burada kaya kadar eğlenceli ve daha kolay

olduğunu !!!

durumda size Ayrıca TreeSet yerine comparator ile ArrayList sıralayabilir bu

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

Bunu b.compareTo (a) olarak değiştirirsek, koleksiyonu geri almamız gerekmez. – zawhtut

+0

@zawhtut, tamamen doğru! seçeneklerden haberdar olmanız için geriye dönük(), seçiminiz – azerafati

0

gibi yazabilirim birve b karşılaştırmak için bir birden fazla satır mantığını gerekli. İşte bir tamsayı dizisi için daha önce sahip olduğum bir sorudan bir örnek. ArrayList için bir yer tutucu adı olarak "sayılar" kullanıyorum.


 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

ancak TreeSet, yinelenen değerleri saklamıyor. –

İlgili konular