© Excellent backgrounds/Shutterstock.com
Goldman Sachs Collections und Java Collection Framework im Vergleich

GSC vs. JDK


In den letzten Jahren kamen immer mehr Alternativen zum Java Collection Framework (JCF) als Open-Source-Projekte auf den Markt, darunter Google Guava, Commons Collections, Apache Mahout, fastutil, Trove – und die Goldman Sachs Collections. Letztere, oft GSC abgekürzt, werden seit mehreren Jahren stetig verbessert. Sie sind unter der Apache-2.0-Lizenz frei verfügbar. Doch was sind die Vorteile des Einsatzes dieser JCF-Erweiterung gegenüber JCF? Lohnen sich die Mühen des Erlernens? Oder birgt der Einsatz dieser Bibliothek sogar Nachteile?

Es ist wohl ein seltener Fall im Bankensektor, dass selbst entwickelte Software der Open-Source-Community zur Verfügung gestellt wird. Der Quellcode der GSC ist auf GitHub verfügbar, genauso wie die gut strukturierten Tutorials (Kata). Dieser Artikel geht auf die folgenden Punkte ein:

  • GSC und Java 7

  • Java 8 Streams und GSC

  • JMH-Benchmark-Tests von GS

  • Aggregation-Tests

Die Goldman-Sachs-Bibliothek basiert auf den Predi­cates, Functions und Procedures. Predicates werden dazu benutzt, um die Elemente aus der Collection auszuwählen, die bestimmten Kriterien entsprechen (Filtering), und Functions können benutzt werden, um zum Beispiel die Teile eines jeden Objekts in einer neuen Collection zusammenzufassen (Transformieren), sodass zum Beispiel aus dem Person-Objekt, das das Adresse-Objekt als Bestandteil hat, alle Adressen in einer neuen Collection zusammengefasst werden können. Die Procedures sind void und geben keinen Wert zurück. Goldman Sachs Collections liefern die besten Ergebnisse beim Einsatz von Java 8.

GSC und Java 7

Die selbst geschriebenen Predicates und Functions erinnern möglicherweise an das Comparable-Interface, das wir nutzen können, um eine Collection zu sortieren. Allerdings ist Comparable natürlich viel komplizierter und enthält eventuell viele Vergleiche, wogegen die Predi­cates/Functions sehr einfach sein können, aber trotzdem als eine Klasse implementiert werden müssen. Sehen wir uns ein Beispiel einer Funktion an, das alle Namen von Kunden zu einer Liste zusammenfassen kann (Listing 1).

Listing 1

Function<Customer, String> nameFunction = new Function<Customer, String>() { @Override public String valueOf(Customer customer) { return customer.getName(); } }; MutableList<String> customerNames = customers.collect(nameFunction);

Da wir in Java 7 keine Codeblöcke einer Funktion übergeben können (mit Java 8 geht das dank Lambda-Expressions viel einfacher), bleibt uns nichts anderes übrig, als in solch einem...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang