Erstgespräch vereinbaren
Kommende Termine
4. Mai 2026
IT-Talk: Digitale Verantwortung
Details →
12. Juni 2026
Vernissage
28. September 2026
IT-Talk: Event-Driven Architecture

Java Streams - ein Vergleich zwischen Guava und Java 8

Praxisvergleich: Guava vs. Java 8 Streams für funktionale Datenverarbeitung mit Lambdas, Filtern und Transformationen.

Code auf dunklem Bildschirm

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.

Zurück zum Blog