455 Stimmen

Wie sortiere ich eine Liste/ArrayList?

Ich habe eine Liste von doubles in Java und möchte das ArrayList in absteigender Reihenfolge sortieren.

Die Eingabe-ArrayList sieht wie folgt aus:

List testList = new ArrayList();

testList.add(0.5);
testList.add(0.2);
testList.add(0.9);
testList.add(0.1);
testList.add(0.1);
testList.add(0.1);
testList.add(0.54);
testList.add(0.71);
testList.add(0.71);
testList.add(0.71);
testList.add(0.92);
testList.add(0.12);
testList.add(0.65);
testList.add(0.34);
testList.add(0.62);

Das Ergebnis sollte so aussehen:

0.92
0.9
0.71
0.71
0.71
0.65
0.62
0.54
0.5
0.34
0.2
0.12
0.1
0.1
0.1

663voto

tckmn Punkte 55248
Collections.sort(testList);
Collections.reverse(testList);

Das wird tun, was du willst. Denke daran, Collections zu importieren!

Hier ist die Dokumentation für Collections.

176voto

최봉재 Punkte 3577

Absteigend:

Collections.sort(mArrayList, new Comparator() {
    @Override
    public int compare(CustomData lhs, CustomData rhs) {
        // -1 - kleiner als, 1 - größer als, 0 - gleich, alles umgekehrt für absteigend
        return lhs.customInt > rhs.customInt ? -1 : (lhs.customInt < rhs.customInt) ? 1 : 0;
    }
});

152voto

krmanish007 Punkte 6070

Für Ihr Beispiel wird dies in Java 8 funktionieren

List testList = new ArrayList();
testList.sort(Comparator.naturalOrder());

Aber wenn Sie nach einigen der Felder des Objekts sortieren möchten, das Sie sortieren, können Sie das ganz einfach tun, indem Sie:

testList.sort(Comparator.comparing(ClassName::getFieldName));

oder

 testList.sort(Comparator.comparing(ClassName::getFieldName).reversed());

oder

 testList.stream().sorted(Comparator.comparing(ClassName::getFieldName).reversed()).collect(Collectors.toList());

Quellen: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

95voto

M Sach Punkte 31756

Verwenden Sie die util-Methode der java.util.Collections-Klasse, d.h.

Collections.sort(list)

Tatsächlich können Sie, wenn Sie ein benutzerdefiniertes Objekt sortieren möchten, verwenden

Collections.sort(List list, Comparator c) 

Sehen Sie sich die Collections-API an

65voto

cyrus Punkte 661

Mit Lambdas (Java8) und der Reduzierung auf die knappste Syntax (der JVM wird in diesem Fall viel abgeleitet), erhält man:

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

Eine ausführlichere Version:

// Implementieren eines Comparator für die umgekehrte Reihenfolge durch Lambda-Funktion
Comparator comp = (Double a, Double b) -> {
    return b.compareTo(a);
};

Collections.sort(testList, comp);

Die Verwendung eines Lambdas ist möglich, weil das Comparator-Interface nur eine einzige Methode zum Implementieren hat, damit kann die VM ableiten, welche Methode implementiert wird. Da die Typen der Parameter abgeleitet werden können, müssen sie nicht angegeben werden (d.h. (a, b) statt (Double a, Double b)). Und da der Lambda-Body nur eine einzige Zeile hat und die Methode erwartet, einen Wert zurückzugeben, wird das return abgeleitet und die geschweiften Klammern sind nicht notwendig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X