Coder Social home page Coder Social logo

sadnessofatlantis / eclipse-collections Goto Github PK

View Code? Open in Web Editor NEW

This project forked from eclipse/eclipse-collections

0.0 1.0 0.0 10.4 MB

Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.

Home Page: http://www.eclipse.org/collections

Java 96.90% Scala 1.11% HTML 1.99% Shell 0.01%

eclipse-collections's Introduction

Eclipse Collections is a comprehensive collections library for Java. The library enables productivity and performance by delivering an expressive and efficient set of APIs and types. The iteration protocol was inspired by the Smalltalk collection framework, and the collections are compatible with the Java Collection Framework types.

Why Eclipse Collections?

  • Productivity
    • Rich, functional, and fluent APIs with great symmetry
    • List, Set, Bag, Stack, Map, Multimap, BiMap, Interval Types
    • Readable, Mutable, and Immutable Types
    • Mutable and Immutable Collection Factories
    • Adapters and Utility classes for JCF Types
  • Performance
    • Memory Efficient Containers
    • Optimized Eager, Lazy and Parallel APIs
    • Primitive Collections for all primitive types
  • Actively developed since 2005

Learn Eclipse Collections

Acquiring Eclipse Collections

Maven

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections-api</artifactId>
  <version>10.0.0</version>
</dependency>

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections</artifactId>
  <version>10.0.0</version>
</dependency>

Gradle

compile 'org.eclipse.collections:eclipse-collections-api:10.0.0'
compile 'org.eclipse.collections:eclipse-collections:10.0.0'

OSGi Bundle

Eclipse software repository location: http://download.eclipse.org/collections/10.0.0/repository

Some Quick Examples

Eclipse Collections puts iteration methods directly on the container types. Here's several code examples that demonstrate the simple and flexible style of programming with Eclipse Collections.

First, we will define a simple class named Person to hold the first and last names of three people.

public class Person
{
    private final String firstName;
    private final String lastName;

    public Person(String firstName, String lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    ...
    public String getLastName()
    {
        return this.lastName;
    }
    
    public boolean lastNameEquals(String name)
    {
        return name.equals(this.lastName);
    }
}

Collect (aka map, transform)

Now we will create a MutableList with three instances of the Person class. Then we will collect their last names into a new MutableList, and finally output the names to a comma delimited String using makeString.

MutableList<Person> people = Lists.mutable.with(
        new Person("Sally", "Smith"),
        new Person("Ted", "Watson"),
        new Person("Mary", "Williams"));
MutableList<String> lastNames = people.collect(person -> person.getLastName());
Assert.assertEquals("Smith, Watson, Williams", lastNames.makeString());

The lambda in the example above can also be replaced with a method reference.

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

Eclipse Collections has support for both Mutable and Immutable collections, and the return types of methods are covariant. While the collect method on a MutableList returned a MutableList, the collect method on an ImmutableList will return an ImmutableList. Here we use the same Lists factory to create an ImmutableList.

ImmutableList<Person> people = Lists.immutable.with(
        new Person("Sally", "Smith"),
        new Person("Ted", "Watson"),
        new Person("Mary", "Williams"));
ImmutableList<String> lastNames = people.collect(Person::getLastName);
Assert.assertEquals("Smith, Watson, Williams", lastNames.makeString());

Eclipse Collections has a lazy API as well, which is available by calling the method asLazy. The method collect will now return a LazyIterable. The LazyIterable that is returned does not evaluate anything until the call to a terminal method is made. In this case, the call to makeString will force the LazyIterable to collect the last names.

LazyIterable<String> lastNames = people.asLazy().collect(Person::getLastName);
Assert.assertEquals("Smith, Watson, Williams", lastNames.makeString());

Select / Reject (aka filter / filter not)

We can find all of the people with the last name "Smith" using the method named select.

MutableList<Person> people = Lists.mutable.with(
        new Person("Sally", "Smith"),
        new Person("Ted", "Watson"),
        new Person("Mary", "Williams"));
MutableList<Person> smiths = people.select(person -> person.lastNameEquals("Smith"));
Assert.assertEquals("Smith", smiths.collect(Person::getLastName).makeString());

If we want to use a method reference, we can use the method selectWith.

MutableList<Person> smiths = people.selectWith(Person::lastNameEquals, "Smith");
Assert.assertEquals("Smith", smiths.collect(Person::getLastName).makeString());

We can find all the people who do not have a last name of "Smith" using the method named reject.

MutableList<Person> notSmiths = people.reject(person -> person.lastNameEquals("Smith"));
Assert.assertEquals("Watson, Williams", notSmiths.collect(Person::getLastName).makeString());

If we want to use a method reference, we can use the method rejectWith.

MutableList<Person> notSmiths = people.rejectWith(Person::lastNameEquals, "Smith");
Assert.assertEquals("Watson, Williams", notSmiths.collect(Person::getLastName).makeString());

Any / All / None

We can test whether any, all or none of the elements of a collection satisfy a given condition.

// Any
Assert.assertTrue(people.anySatisfy(person -> person.lastNameEquals("Smith"));
Assert.assertTrue(people.anySatisfyWith(Person::lastNameEquals, "Smith"));

// All
Assert.assertFalse(people.allSatisfy(person -> person.lastNameEquals("Smith"));
Assert.assertFalse(people.allSatisfyWith(Person::lastNameEquals, "Smith"));

// None
Assert.assertFalse(people.noneSatisfy(person -> person.lastNameEquals("Smith"));
Assert.assertFalse(people.noneSatisfyWith(Person::lastNameEquals, "Smith"));

How to Contribute

We welcome contributions! We accept contributions via pull requests here in GitHub. Please see How To Contribute to get started.

Additional information

eclipse-collections's People

Contributors

nikhilnanivadekar avatar motlin avatar donraab avatar itohro avatar godin avatar itohiro73 avatar gs-rezaem avatar superhindupur avatar eclipse-collections-bot avatar pascalschumacher avatar victornoel avatar henohenotsuyoshi avatar theloneking avatar mohrezaei avatar brenopessoa avatar gs-vmzakharov avatar guoci avatar hillmerch avatar cinquin avatar ujhelyiz avatar nolequen avatar daniel-dos avatar david-gang avatar cguntur-bnym avatar canthonyl avatar g-votte avatar sendilkumarn avatar marschall avatar jankotek avatar guw avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.