Home » Beitrag verschlagwortet mit 'Java 8'

Schlagwort-Archive: Java 8

Zusammengehörende Objekte in einer Collection zusammenfassen – Mit Java Stream API

Angenommen wir haben eine Collection von Einkäufen (Joghurt, Bananen, Deodorant, Äpfel, Käse, …) und wir wollen diese zusammenfassen (z.B. Milchprodukte, Früchte, …) dann können wir das wie folgt machen:

Map<String, Purchase> condensedMap = purchases.stream()
    .collect(Collectors.groupingBy(Purchase::getCategory,
        Collectors.collectingAndThen(Collectors.reducing(
         (a,b) -> new Category(a.getCategory().name(), Math.sum(a.price(), b.price())), 
Optional::get))));

List<Category> condensedList = condensedMap.values();

Inspired by Java stream merge or reduce duplicate objects

Optional.ofNullable / Optional.map – Mehrstufig hierarchische NOT NULL Abfrage. Anstatt Abfrage auf != NULL

Schritt 1: Erstelle ein Optional auf dem Object auf das du null-wert-sicher zugreifen möchtest:

Optional isOptionallyNull = Optional.ofNullable(instOfClassANotShureIfNull);

Schritt 2: Greife auf Felder (und Child-Felder) zu Obwohl die Instanz selbst (oder ihre Children) ja null sein könnten: Map:

ClassC unterUnterObject = isOptionallyNull .map(ClassA::getSubObjB).map(ClassB::getSubC).orElseGet(ClassC::new)

Wie oben demonstriert können über mehrere Stufen aggregierte Sub-Objekte so abgefragt werden, obwohl man nicht weiss ob Vater- oder Zwischenobjekte NULL sein könnten.

Filtern von Stream-Objekten und Verarbeitung mit dem gefundenen Objekt (–> ifPresent)

if (v1 != null && issuerMap.containsKey(v1)) {
    phcCr.setIssuer(issuerMap.get(v1));
}

… kann dasselbe erreicht werden mit:

Optional.ofNullable(v1).filter(value -> issuerMap.containsKey(value))
.ifPresent(value -> phcCr.setIssuer(issuerMap.get(value)));

Vordefinierte Java Functional Interfaces – Welches kann ich benutzen?

ParameterFunctional Interface
keineRunnable
1 inputConsumer
1 outputSupplier
1 input / 1 outputFunction
2 inputBiConsumer