Skip to content
This repository

A supplement or replacement for the Java Collections Framework.

branch: master

[GSCOLLECT-1337] Update README.md.

git-svn-id: svn+ssh://gscollections.svn.services.gs.com/svnroot/gscollections-svn/trunk@591 d5c9223b-1aff-41ac-aadd-f810b4a99ac4
latest commit 4e597130fb
Bhavana Hindupur authored
Octocat-spinner-32 .idea [GSCOLLECT-1352] Update version number to 5.0.0 in the build. March 21, 2014
Octocat-spinner-32 .settings [GSCOLLECT-35] Initial import. January 05, 2012
Octocat-spinner-32 acceptance-tests [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 collections-api [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 collections-testutils [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 collections [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 gs-collections-code-generator-ant [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 gs-collections-code-generator-maven-plugin [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 gs-collections-code-generator [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 gs-collections-forkjoin [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 performance-tests [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 scala-unit-tests [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 serialization-tests [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 unit-tests [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 .classpath [GSCOLLECT-35] Initial import. January 05, 2012
Octocat-spinner-32 .gitignore [GSCOLLECT-625] Add .gitignore file. February 09, 2012
Octocat-spinner-32 .project [GSCOLLECT-35] Initial import. January 05, 2012
Octocat-spinner-32 LICENSE-2.0.txt [GSCOLLECT-35] Initial import. January 05, 2012
Octocat-spinner-32 NOTICE [GSCOLLECT-882] Add StringTemplate to the NOTICE file. March 01, 2013
Octocat-spinner-32 README.md [GSCOLLECT-1337] Update README.md. March 26, 2014
Octocat-spinner-32 build.xml [GSCOLLECT-1325] Change test modules to use Java 8 and replace anonym… March 08, 2014
Octocat-spinner-32 checkstyle-configuration.xml [GSCOLLECT-1061] Upgrade CheckStyle and fix violations. August 12, 2013
Octocat-spinner-32 checkstyle-suppressions.xml [GSCOLLECT-1288] Implement additional performance tests for ParallelI… March 06, 2014
Octocat-spinner-32 collections-parent.iml [GSCOLLECT-1278] Update versions of dependencies. February 26, 2014
Octocat-spinner-32 common-build.xml [GSCOLLECT-42] Configure deployment to Maven Central. September 25, 2013
Octocat-spinner-32 deploy.properties [GSCOLLECT-1353]: Commit build info for release. March 21, 2014
Octocat-spinner-32 findbugs-exclude.xml [GSCOLLECT-1016] Fix serialization of unmodifiable and synchronized w… February 13, 2014
Octocat-spinner-32 java.header [GSCOLLECT-898] Change the CheckStyle header regular expression to al… March 22, 2013
Octocat-spinner-32 pom-template [GSCOLLECT-42] Configure deployment to Maven Central. September 26, 2013
Octocat-spinner-32 pom.xml [GSCOLLECT-1352] Update version number in the pom.xml files. March 21, 2014
Octocat-spinner-32 version.properties [GSCOLLECT-1278] Update versions of dependencies. February 26, 2014
README.md

GS Collections

GS Collections is a collections framework for Java. It has JDK-compatible List, Set and Map implementations with a rich API and set of utility classes that work with any JDK compatible Collections, Arrays, Maps or Strings. The iteration protocol was inspired by the Smalltalk collection framework.

Download

Quick Example

GS Collections puts iteration methods on the container types. Lambdas are simulated using anonymous inner classes. Here's a code example that demonstrates the usual style of programming with GS Collections.

MutableList<Person> people = FastList.newListWith(person1, person2, person3);
MutableList<String> sortedLastNames = people.collect(Person.TO_LAST_NAME).sortThis();
System.out.println("Comma separated, sorted last names: " + sortedLastNames.makeString());

Person.TO_LAST_NAME is defined as a constant Function in the Person class.

public static final Function<Person, String> TO_LAST_NAME = new Function<Person, String>()
{
    public String valueOf(Person person)
    {
        return person.lastName;
    }
};

In Java 8, the Function can be replaced with a lambda:

MutableList<String> sortedLastNames = people.collect(person -> person.getLastName()).sortThis();

Or, a method reference:

MutableList<String> sortedLastNames = people.collect(Person::getLastName).sortThis();

Why GS Collections?

  • Improves readability and reduces duplication of iteration code (enforces DRY/OAOO)
  • Implements several, high-level iteration patterns (select, reject, collect, inject into, etc.) on "humane" container interfaces which are extensions of the JDK interfaces
  • Provides a consistent mechanism for iterating over Collections, Arrays, Maps, and Strings
  • Provides replacements for ArrayList, HashSet, and HashMap optimized for performance and memory usage
  • Performs more "behind-the-scene" optimizations in utility classes
  • Encapsulates a lot of the structural complexity of parallel iteration and lazy evaluation
  • Adds new containers including Bag, Interval, Multimap, and immutable versions of all types
  • Has been under active development since 2005 and is a mature library

Documentation

The best way to learn about GS Collections is to dive into the code kata. The kata is a fun way to learn idiomatic GS Collections usage and hone your skills through practice.

For more comprehensive documentation, take a look at the Reference Guide.

Contributions

We currently do all development in an internal Subversion repository and are not prepared to take external contributions. However, we watch the issue tracker for bug reports and feature requests.

FAQ

Why is Goldman Sachs open-sourcing GS Collections?

  • We believe that GS Collections offers a significant advantage over existing solutions. We hope others will benefit from it.
  • We believe in the power of the technical community to help improve GS Collections.
  • Technology is a huge part of what we do at Goldman Sachs. GS Collections exemplifies our commitment to technology.
  • We use open source software in many of our operations. We have benefited from the work of others and we'd like to give something back.

Does Goldman Sachs use GS Collections?

Yes, we use GS Collections in many of our internal applications.

Something went wrong with that request. Please try again.