ArrayList <Long> azalan düzende nasıl sıralanır?


98

Nasıl bir sıralamak için ArrayList<Long>azalan sırada Java?

Yanıtlar:


240

İşte sizin için bir yol list:

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

Veya Comparatorters adımı sıralamak ve ortadan kaldırmak için kendinizinkini uygulayabilirsiniz :

list.sort((o1, o2) -> o2.compareTo(o1));

Veya daha da basitçe şunu kullanın, Collections.reverseOrder()çünkü yalnızca ters çeviriyorsunuz

list.sort(Collections.reverseOrder());

6
l1 > l2 ? -1 : l1 == l2 ? 0 : 1bu kod saçma. o1.compareTo(o2)O zaman kullan .
ilalex

4
@ilya: oh evet, iyi nokta, o2.compareTo(o1)burada olması gerekse de :)
WhiteFang34

2
list.sort (Collections.reverseOrder ());
tunix

Başparmak yukarıyalist.sort((o1, o2) -> o2.compareTo(o1))
arenaq

27
Comparator<Long> comparator = Collections.reverseOrder();
Collections.sort(arrayList, comparator);

Sadece bu değişken bildiriminde genel bir argüman ile.
Tom Hawtin - tackline

18

Aşağıda verilen aşağıdaki kodu kullanabilirsiniz;

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

veya özel karşılaştırıcı kullanacaksanız, aşağıda verildiği gibi kullanabilirsiniz.

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

CustomComparator, listede bulunan nesneyi karşılaştıran bir karşılaştırıcı sınıftır.


10

Java 8

bunu java 8'de iyi yapmak çok eğlenceli ve kolay

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

Lambda ifadeleri burada harika !!!

a ve b'yi karşılaştırmak için birden fazla satır mantığına ihtiyacınız varsa, bunu şöyle yazabilirsiniz

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

2
Sanırım bunu b.compareTo (a) olarak değiştirirsek, koleksiyonu tersine çevirmemize gerek kalmayacak.
zawhtut

@zawhtut, tamamen doğru! Sadece ters () Eğer seçenekler biliyorum ki, seçim sizin sözü
azerafati

1
Long'u Long'a dönüştürmek zorunda mısınız?
BluE


3

Uzun değerinizin bir nesnede bir yerde olduğu lamdalar için kullanmanızı öneririm:

.sorted((o1, o2) -> Long.compare(o1.getLong(), o2.getLong()))

hatta daha iyisi:

.sorted(Comparator.comparingLong(MyObject::getLong))


2

Aşağıdaki gibi kendi Karşılaştırıcımızı uygulamak için daha genel bir yaklaşım

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


1

Aşağıdaki yaklaşım, listeyi azalan sırada sıralayacak ve aynı zamanda ' boş ' değerleri de işleyecektir , sadece herhangi bir boş değeriniz varsa, Collections.sort () NullPointerException atacaktır.

      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);

        }
    });

0

Ayrıca ArrayList, bir TreeSetyerine a ile sıralayabilirsiniz comparator. İşte daha önce bir tamsayı dizisi için sorduğum bir sorudan bir örnek. İçin yer tutucu adı olarak "sayılar" kullanıyorum 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()+" ");
    }
}

Ancak TreeSetyinelenen değerleri saklamaz.

0

Yani, önemli olduğunu düşündüğüm ve düşünmeniz gereken bir konu var. çalışma zamanı ve bellek. Diyelim ki bir listeniz var ve onu sıralamak istiyorsunuz, peki yapabilirsin, yerleşik bir sıralama vardır veya kendi listenizi geliştirebilirsiniz. Sonra listeyi tersine çevirmek istiyorum diyorsunuz. Yukarıda listelenen cevap budur.

Yine de bu listeyi oluşturuyorsanız, depolamak için farklı bir veri yapısı kullanmak ve ardından onu bir diziye dökmek iyi olabilir.

Yığınlar bunu yapar. Verileri filtrelersiniz ve her şeyi halleder, sonra her şeyi nesneden çıkarabilir ve sıralanacaktır.

Diğer bir seçenek de haritaların nasıl çalıştığını anlamak olabilir. Çoğu zaman, bir Harita veya HashMap, bir şey olarak adlandırılır, arkasında bir kavram vardır.

Örneğin .... anahtarın uzun olduğu bir grup anahtar-değer çiftini beslersiniz ve tüm öğeleri eklediğinizde şunları yapabilirsiniz: .keysve size otomatik olarak sıralı bir liste geri döner.

Sıralama ve sonraki ters işlemlere nasıl devam etmeniz gerektiğini düşündüğümden önce verileri nasıl işlediğinize bağlıdır.


0

Karşılaştırıcının karşılaştırma yöntemi, nesneleri karşılaştırmak için kullanılabilir ve daha sonra reversed(), sıralamayı tersine çevirmek için yöntem uygulanabilir -

list.stream().sorted(Comparator.comparing(Employee::getName).reversed()).collect(toList());

0

kullanılması List.sort()veComparator.comparingLong()

numberList.sort(Comparator.comparingLong(x -> -x));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.