We are pleased to announce that GS Collections has been migrated to the Eclipse Foundation, re-branded as Eclipse Collections.
Eclipse Collections 7.0 has the exact same feature set as GS Collections 7.0.
Going forward, any new features will be developed in Eclipse Collections. We will only port critical bug fixes to GS Collections. To support smooth migration for users, we implemented a conversion application gsc-ec-converter. Please plan your migration accordingly from GS Collections to Eclipse 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. The library modules in GS Collections are compatible with Java 5 (gs-collections-api, gs-collections, and gs-collections-testutils).
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();
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. Please refer to the wiki for more details.
For more comprehensive documentation, take a look at the Reference Guide.
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.
Yes, we use GS Collections in many of our internal applications.
<dependency>
<groupId>com.goldmansachs</groupId>
<artifactId>gs-collections-api</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>com.goldmansachs</groupId>
<artifactId>gs-collections</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>com.goldmansachs</groupId>
<artifactId>gs-collections-testutils</artifactId>
<version>7.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.goldmansachs</groupId>
<artifactId>gs-collections-forkjoin</artifactId>
<version>7.0.0</version>
</dependency>
compile 'com.goldmansachs:gs-collections-api:7.0.0'
compile 'com.goldmansachs:gs-collections:7.0.0'
testCompile 'com.goldmansachs:gs-collections-testutils:7.0.0'
compile 'com.goldmansachs:gs-collections-forkjoin:7.0.0'
<dependency org="com.goldmansachs" name="gs-collections-api" rev="7.0.0" />
<dependency org="com.goldmansachs" name="gs-collections" rev="7.0.0" />
<dependency org="com.goldmansachs" name="gs-collections-testutils" rev="7.0.0" />
<dependency org="com.goldmansachs" name="gs-collections-forkjoin" rev="7.0.0"/>