forked from Labore/PR2-L
88 lines
3.3 KiB
Java
88 lines
3.3 KiB
Java
/**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<Freund> 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<Freund> 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<Freund> aufsteigendAlter = (freund1, freund2) -> freund1.altersUnterschied(freund2);
|
|
Comparator<Freund> absteigendAlter = aufsteigendAlter.reversed();
|
|
|
|
aufsteigendesAlter = eineListe
|
|
.stream().sorted(absteigendAlter)
|
|
.collect(Collectors.toList());
|
|
|
|
druckeFreunde("Sortierung nach absteigendem Alter:", aufsteigendesAlter);
|
|
|
|
// Version (5) - Sortierung nach aufsteigendem Nachnamen:
|
|
|
|
List<Freund> 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<Freund, String> 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<Freund, Integer> 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<Freund> freunde) {
|
|
System.out.println(titel);
|
|
freunde.forEach(System.out::println);
|
|
}
|
|
}
|