wake-up-neo.net

ArrayList mit Lambda in Java 8 sortieren

Könnte mir jemand ein schnelles Beispiel zeigen, wie man eine Variable ArrayList in Java 8 mit der neuen Lambda-Syntax alphabetisch sortiert.

31
Jeef

Für Saiten würde das funktionieren

arrayList.sort((p1, p2) -> p1.compareTo(p2));
49
poosliver

Sortierst du nur Strings? Wenn ja, brauchen Sie keine Lambdas; es bringt nichts. Du machst es einfach

import static Java.util.Comparator.*;

list.sort(naturalOrder());

... wenn Sie jedoch Objekte mit einem String-Feld sortieren, ist dies etwas sinnvoller:

list.sort(comparing(Foo::getString));
26
Louis Wasserman

Verwenden Sie list.sort(String::compareToIgnoreCase)

Die Verwendung von list.sort(String::compareTo) oder list.sort(Comparator.naturalOrder()) führt zu falschen (dh nicht alphabetischen) Ergebnissen. Es sortiert alle Großbuchstaben vor alle Kleinbuchstaben, sodass das Array ["aAAA","Zzz", "zzz"] in ["Zzz", "aAAA", "zzz"]

4
UTF_or_Death

Angenommen, Sie haben eine Liste von Namen (String), die Sie alphabetisch sortieren möchten.

List<String> result = names.stream().sorted(
                 Comparator.comparing(n->n.toString())).collect(Collectors.toList());

es funktioniert perfekt.

3
Sai prateek

Eine wirklich generische Lösung wäre, einige StreamUtil-ähnliche einzuführen

public class StreamUtil {

    private StreamUtil() {
    }       

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static <TYPE> Comparator<TYPE> sort(Function<TYPE, ? extends Comparable> getterFunction, boolean descending) {
        if (descending) {
            return (o1, o2) -> getterFunction.apply(o2).compareTo(getterFunction.apply(o1));
        }
        return (o1, o2) -> getterFunction.apply(o1).compareTo(getterFunction.apply(o2));
    }

}

Der Anruf würde ungefähr so ​​aussehen

list.stream().sorted(sort(YourClass::getSortProperty, true));
1
Chris311

Am prägnantesten:

Collections.sort(stringList, String::compareToIgnoreCase);
0
Faraz Durrani

Bei der funktionalen Programmierung verwenden Sie nicht die alten Objekte, um sie zu bearbeiten, sondern erstellen die neuen Objekte auf eine solche Weise:

list.stream().sorted().map(blah-blah).filter(...)...
0
Dmitry Ginzburg