Antworten:
Hier ist ein Weg für Sie list
:
list.sort(null);
Collections.reverse(list);
Oder Sie können Ihre eigene implementieren, Comparator
um den umgekehrten Schritt zu sortieren und zu eliminieren:
list.sort((o1, o2) -> o2.compareTo(o1));
Oder noch einfacher verwenden, Collections.reverseOrder()
da Sie nur umkehren:
list.sort(Collections.reverseOrder());
o2.compareTo(o1)
hier sein muss :)
list.sort((o1, o2) -> o2.compareTo(o1))
Comparator<Long> comparator = Collections.reverseOrder();
Collections.sort(arrayList, comparator);
Sie können den folgenden Code verwenden, der unten angegeben ist.
Collections.sort(list, Collections.reverseOrder());
oder wenn Sie einen benutzerdefinierten Komparator verwenden möchten, können Sie diesen wie unten angegeben verwenden
Collections.sort(list, Collections.reverseOrder(new CustomComparator());
Wobei CustomComparator eine Vergleichsklasse ist, die das in der Liste vorhandene Objekt vergleicht.
Das in Java 8 zu tun ist so viel Spaß und einfacher
Collections.sort(variants,(a,b)->a.compareTo(b));
Collections.reverse(variants);
Lambda-Ausdrücke rocken hier !!!
Falls Sie mehr als eine Zeilenlogik zum Vergleichen von a und b benötigen , können Sie diese so schreiben
Collections.sort(variants,(a,b)->{
int result = a.compareTo(b);
return result;
});
Normal sortieren und verwenden Collections.reverse();
Sortieren und dann umkehren.
Ein allgemeinerer Ansatz zur Implementierung unseres eigenen Komparators ist unten aufgeführt
Collections.sort(lst,new Comparator<Long>(){
public int compare(Long o1, Long o2) {
return o2.compareTo(o1);
}
});
Durch Verwendung Collections.sort()
mit einem Komparator, der die absteigende Reihenfolge liefert. Siehe Javadoc für Collections.sort .
Der folgende Ansatz sortiert die Liste in absteigender Reihenfolge und behandelt auch die ' Null' -Werte. Nur für den Fall, dass Sie Nullwerte haben , löst Collections.sort () eine NullPointerException aus
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);
}
});
Sie können a auch ArrayList
mit a TreeSet
anstelle von a sortieren comparator
. Hier ist ein Beispiel aus einer Frage, die ich zuvor für ein ganzzahliges Array hatte. Ich verwende "Zahlen" als Platzhalternamen für die 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()+" ");
}
}
Es gibt also etwas, das ich ansprechen möchte, das ich für wichtig halte und das Sie berücksichtigen sollten. Laufzeit und Speicher. Angenommen, Sie haben eine Liste und möchten sie sortieren. Nun, Sie können, es gibt eine integrierte Sortierung, oder Sie könnten Ihre eigene entwickeln. Dann sagst du, willst du die Liste umkehren. Das ist die Antwort, die oben aufgeführt ist.
Wenn Sie diese Liste erstellen, ist es möglicherweise sinnvoll, eine andere Datenstruktur zum Speichern zu verwenden und sie dann einfach in einem Array abzulegen.
Haufen machen genau das. Sie filtern Daten ein und sie verarbeiten alles. Dann können Sie alles aus dem Objekt entfernen und es wird sortiert.
Eine andere Möglichkeit wäre zu verstehen, wie Karten funktionieren. Oft hat eine Map oder HashMap, wie man sie nennt, ein zugrunde liegendes Konzept.
Zum Beispiel ... Sie geben eine Reihe von Schlüssel-Wert-Paaren ein, wobei der Schlüssel lang ist, und wenn Sie alle Elemente hinzufügen, können Sie Folgendes tun: .keys
und es wird automatisch eine sortierte Liste an Sie zurückgegeben.
Es hängt davon ab, wie Sie die Daten verarbeiten, bevor Sie meiner Meinung nach mit dem Sortieren und den anschließenden Umkehrungen fortfahren
l1 > l2 ? -1 : l1 == l2 ? 0 : 1
Dieser Code ist lächerlich. Verwenden Sieo1.compareTo(o2)
dann.