
Mit Java 8 wurden Lambdas/Closures als wichtiges Sprachfeature eingeführt. Für Datenverarbeitungsaufgaben gewinnt der funktionale Ansatz zunehmend an Bedeutung, wobei Operationen wie Filtern, Transformieren und Sortieren immer häufiger werden. Dieser Artikel präsentiert Beispiele im Vergleich zwischen Guava und Java 8 für typische Anwendungsfälle.
Daten aus einer Liste in eine Map transformieren
1:1 Map-Transformation
Guavas Maps.uniqueIndex()-Methode erstellt eine unveränderliche Map und wirft eine Exception, wenn doppelte Indexwerte
auftreten. Java 8s Alternative verwendet Collectors.toMap() und erzeugt eine veränderliche Map. Die Java-8-API ist
generischer, aber weniger spezialisiert für bestimmte Szenarien.
Transformation von Schlüssel und Wert
Für ein Person-Listen-Beispiel (mit Name und Alter) kombiniert Guava transformValues und uniqueIndex, während Java 8
einen einzelnen toMap()-Aufruf verwendet. Guavas Implementierung nutzt Lazy Evaluation – Transformationen werden erst
beim Elementzugriff ausgeführt – was Modifikationen verhindert, aber die Fehlererkennung verzögert.
Werte anhand eines Schlüssels gruppieren
Guava bietet Multimap mit Multimaps.index(), während Java 8 Collectors.groupingBy() bereitstellt. Dieser
Anwendungsfall war vor diesen Bibliotheken umständlich zu implementieren.
Listen aus Listen
Filtern und Transformieren
Am Beispiel der Filterung gerader Zahlen: Guavas FluentIterable mit filter()- und transform()-Methoden entspricht
Java 8s stream() mit filter() und map(). Iterables unterscheiden sich von Collections hauptsächlich darin, dass
die Größe unbekannt ist und kein direkter Datenzugriff möglich ist.
Flatmap-Operationen
Flatmap kombiniert die Elementtransformation in eine Liste mit anschließender Verkettung. Guava verwendet
transformAndConcat(), während Java 8 flatMap() nutzt. Java 8 erfordert eine Stream-Konvertierung, während Guava
direkt mit Iterables arbeitet.
Java 7 vs. Java 8
Java 7 mit Guava
Das Beispiel demonstriert das Erstellen einer gefilterten Map mit Hilfsklassen und statischen Function- und Predicate-Instanzen. Obwohl ausführlich, verhindert dieser Ansatz Code-Duplikation durch Zentralisierung wiederverwendbarer Transformationen.
Java 8
Eine kompaktere Version mit Lambdas erreicht dasselbe ohne Hilfsklassen. Allerdings birgt die einfache Inline-Schreibweise von Lambdas das Risiko, identische Logik über die Codebasis zu verstreuen.
Fazit
Funktionale Ansätze erfordern nicht zwingend Java 8. Guava bietet umfangreiche Möglichkeiten, und die unveränderlichen Collection-Varianten bieten erhebliche Vorteile. Bei der Nutzung neuer Java-8-Sprachfeatures sollte besonders die Testbarkeit berücksichtigt werden.
