/**Copyright (c) Balzert, H: "Java: Objektorientiert Programmieren" * W3L-Verlag Dortmund, 3. Auflage, 2014 * Beispiel für das Sortieren mit Lambda-Ausdrücken, S. 333 f. */ import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; public class DemoSortMehfachLambda { public static void main(String[] args) throws Exception { ArrayList eineListe = new ArrayList<>(); eineListe.add(new Freund("Meyer", "Hans", 42)); eineListe.add(new Freund("Schulz", "Joe", 26)); eineListe.add(new Freund("Bohn", "Helga", 17)); eineListe.add(new Freund("Dorakov", "Johanna", 66)); eineListe.add(new Freund("Müller", "Dirk", 27)); // Version (1) mit Lambda-Ausdruck List aufsteigendesAlter = eineListe .stream() .sorted((freund1, freund2) -> freund1.altersUnterschied(freund2)) .collect(Collectors.toList()); // Version (2) mit Methodenreferenz druckeFreunde("Sortierung nach aufsteigendem Alter:", aufsteigendesAlter); aufsteigendesAlter = eineListe .stream() .sorted(Freund::altersUnterschied) .collect(Collectors.toList()); druckeFreunde("Sortierung nach aufsteigendem Alter:", aufsteigendesAlter); // Version (3) Absteigendes Alter - Vertauschen der Parameter aufsteigendesAlter = eineListe .stream() .sorted((freund1, freund2) -> freund2.altersUnterschied(freund1)) .collect(Collectors.toList()); druckeFreunde("Sortierung nach absteigendem Alter:", aufsteigendesAlter); // Version (4) Absteigendes Alter mit reverse() Comparator aufsteigendAlter = (freund1, freund2) -> freund1.altersUnterschied(freund2); Comparator absteigendAlter = aufsteigendAlter.reversed(); aufsteigendesAlter = eineListe .stream().sorted(absteigendAlter) .collect(Collectors.toList()); druckeFreunde("Sortierung nach absteigendem Alter:", aufsteigendesAlter); // Version (5) - Sortierung nach aufsteigendem Nachnamen: List aufsteigendNachnamen = eineListe.stream() .sorted((freund1, freund2) -> freund1.getNachname().compareTo(freund2.getNachname())) .collect(Collectors.toList()); druckeFreunde("Sortierung nach aufsteigenden Nachnamen:", aufsteigendNachnamen); // Version (6) - Mit funktionaler Schnittstelle final Function nachName = freund -> freund.getNachname(); aufsteigendNachnamen = eineListe.stream().sorted(Comparator.comparing(nachName)) .collect(Collectors.toList()); druckeFreunde("Sortierung nach aufsteigenden Nachnamen:", aufsteigendNachnamen); // Version 7 Sortierung zuerst nach Alter, dann nach Nachnamen final Function nachAlter = freund -> freund.getAlter(); druckeFreunde("Sortierung aufsteigend zuerst nach Alter, " + "dann nach Nachnamen: ", eineListe.stream() .sorted(Comparator.comparing(nachAlter).thenComparing(nachName)) .collect(Collectors.toList())); } private static void druckeFreunde(String titel, List freunde) { System.out.println(titel); freunde.forEach(System.out::println); } }