Kapitel 13. Streams, Iterables und Sequenzen

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Sowohl Java als auch Kotlin ermöglichen es uns, Sammlungen umzuwandeln und zu reduzieren. Sie haben jedoch unterschiedliche Designziele und Implementierungen. Was verwendet Kotlin anstelle von Java-Streams, wann sollten wir umwandeln und wie?

Java Streams

Java 8 hat 2014 Streams eingeführt, die die neuen Lambdas gut nutzen. Angenommen, wir wollen die durchschnittliche Länge einiger Strings ermitteln, wobei leere Strings (solche mit nur Leerzeichen) so behandelt werden sollen, als wären sie leer. Früher hätten wir vielleicht geschrieben:

public static double averageNonBlankLength(List<String> strings) {
    var sum = 0;
    for (var s : strings) {
        if (!s.isBlank())
            sum += s.length();
    }
    return sum / (double) strings.size();
}

Mit Java-Streams können wir diesen Algorithmus als filter, map und reduce ausdrücken, indem wir zuerst List in Stream umwandeln und Transformationen anwenden:

public static double averageNonBlankLength(List<String> strings) {
    return strings
        .stream()
        .filter(s -> !s.isBlank())
        .mapToInt(String::length)
        .sum()
        / (double) strings.size();
}

Anstatt die for-Schleife in unserem Kopf ablaufen zu lassen, um zu sehen, was dieser Code macht, können wir die Schritte des Algorithmus Zeile für Zeile deklarieren und uns darauf verlassen, dass die Laufzeit diese Schritte für uns implementiert.

Wenn wir ...

Get Von Java zu Kotlin now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.