<!DOCTYPE html>
<!--
  ~ Copyright (c) 2020 Goldman Sachs and others
  ~ All rights reserved. This program and the accompanying materials
  ~ are made available under the terms of the Eclipse Public License v1.0
  ~ and Eclipse Distribution License v. 1.0 which accompany this distribution.
  ~ The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
  ~ and the Eclipse Distribution License is available at
  ~ http://www.eclipse.org/org/documents/edl-v10.php.
  -->

<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />

    <title>Eclipse Collections - Features you want with the collections you need. </title>

    <!-- Bootstrap Core CSS -->
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha256-7s5uDGW3AHqw6xtJmNNtr+OBRJUlgkNJEo78P4b0yRw= sha512-nNo+yCHEyn0smMxSswnf/OnX6/KwJuZTlNZBjauKhTK0c+zT+q5JOCx0UFhXQ6rJR9jg6Es8gPuD2uZcYDLqSw==" crossorigin="anonymous">

    <!-- Custom CSS -->
    <link href="css/landing-page.css" rel="stylesheet">

    <!-- Custom Fonts -->
    <link href="//fonts.googleapis.com/css?family=Roboto+Condensed:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">

    <!-- Google Code Prettify -->
    <link href="css/sunburst.css" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

</head>

<body>

    <!-- Navigation -->
    <nav class="navbar navbar-default navbar-fixed-top topnav" role="navigation">
        <div class="container topnav">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <img src="img/eclipse-collections-logo.png" style="width:175px;height:50px;" align="left" alt="Eclipse Collections">
            </div>
            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="#start">Get Started</a>
                    </li>
                    <li>
                        <a href="#concept">Concept</a>
                    </li>
                    <li>
                        <a href="#learn">Learn</a>
                    </li>
                    <li>
                        <a href="#history">History</a>
                    </li>
                    <li>
                        <a href="#refGuide">Reference Guide</a>
                    </li>
                    <li>
                        <a href="#sourceCode">Source Code</a>
                    </li>
                    <li>
                        <a href="#contribute">Contribute</a>
                    </li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">Javadoc<span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="javadoc/10.2.0">10.2.0</a></li>
                            <li><a href="javadoc/10.1.0">10.1.0</a></li>
                            <li><a href="javadoc/10.0.0">10.0.0</a></li>
                            <li><a href="javadoc/9.2.0">9.2.0</a></li>
                            <li><a href="javadoc/9.1.0">9.1.0</a></li>
                            <li><a href="javadoc/9.0.0">9.0.0</a></li>
                            <li><a href="javadoc/8.2.0">8.2.0</a></li>
                            <li><a href="javadoc/8.1.0">8.1.0</a></li>
                            <li><a href="javadoc/8.0.0">8.0.0</a></li>
                            <li><a href="javadoc/7.1.0">7.1.0</a></li>
                        </ul>
                    </li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">Language<span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="">English</a></li>
                            <li><a href="de/index.html">Deutsch</a></li>
                            <li><a href="el/index.html">Ελληνικά</a></li>
                            <li><a href="es/index.html">Español</a></li>
                            <li><a href="cn/index.html">中文</a></li>
                            <li><a href="fr/index.html">Français</a></li>
                            <li><a href="ja/index.html">日本語</a></li>
                            <li><a href="pt-br/index.html">Português-Brasil</a></li>
                            <li><a href="ru/index.html">Русский</a></li>
                            <li><a href="hi/index.html">हिंदी</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container -->
    </nav>


    <!-- Header -->
    <a class="anchor" name="about"></a>
    <div class="intro-header">
        <div class="container-fluid">

            <div class="row">
                <div class="col-lg-push-2 col-lg-8">
                    <div class="intro-message">
                        <h1>Eclipse <span style="font-weight: 400">Collections</span></h1>
                        <h3>- Features you want with the collections you need -</h3>
                    </div>
                </div>
            </div>

        </div>
        <!-- /.container -->

    </div>
    <!-- /.intro-header -->

    <!-- Page Content -->

    <a class="anchor" name="start"></a>
    <div class="content-section-a">

        <div class="container-fluid">
            <div class="row">
                <div class="col-lg-5 col-sm-6">
                    <hr class="section-heading-spacer">
                    <div class="clearfix"></div>
                    <h2 class="section-heading">Get started with <br>Eclipse Collections</h2>
                    <p class="lead">Eclipse Collections is the best Java collections framework ever
                        that brings happiness to your Java development.
                        <br><br>Integrate it to your codebase today with your favorite build tools!</p>
                </div>
                <div class="col-lg-7 col-sm-6">
                    <ul class="nav nav-tabs">
                        <li class="active"><a href="#maven" data-toggle="tab">Maven</a></li>
                        <li><a href="#gradle" data-toggle="tab">Gradle</a></li>
                        <li><a href="#ivy" data-toggle="tab">Ivy</a></li>
                        <li><a href="#download" data-toggle="tab">Download</a></li>
                    </ul>
                    <div id="dependencies" class="tab-content">
                        <div class="tab-pane fade in active" id="maven">
                            <pre  class="prettyprint">
&lt;dependency&gt;
  &lt;groupId&gt;org.eclipse.collections&lt;/groupId&gt;
  &lt;artifactId&gt;eclipse-collections-api&lt;/artifactId&gt;
  &lt;version&gt;10.2.0&lt;/version&gt;
&lt;/dependency&gt;

&lt;dependency&gt;
  &lt;groupId&gt;org.eclipse.collections&lt;/groupId&gt;
  &lt;artifactId&gt;eclipse-collections&lt;/artifactId&gt;
  &lt;version&gt;10.2.0&lt;/version>
&lt;/dependency&gt;</pre>
                        </div>
                        <div class="tab-pane fade" id="gradle">
                            <pre  class="prettyprint">
compile 'org.eclipse.collections:eclipse-collections-api:10.2.0'
compile 'org.eclipse.collections:eclipse-collections:10.2.0'</pre>
                        </div>
                        <div class="tab-pane fade" id="ivy">
                            <pre  class="prettyprint">
&lt;dependency org="org.eclipse.collections" name="eclipse-collections-api" rev="10.2.0" /&gt;
&lt;dependency org="org.eclipse.collections" name="eclipse-collections" rev="10.2.0" /&gt;</pre>
                        </div>
                        <div class="tab-pane fade" id="download">
                            <pre class="prettyprint">
<a target="_blank" href="http://mvnrepository.com/artifact/org.eclipse.collections/eclipse-collections-api/10.2.0">eclipse-collections-api-10.2.0.jar</a>
<a target="_blank" href="http://mvnrepository.com/artifact/org.eclipse.collections/eclipse-collections/10.2.0">eclipse-collections-10.2.0.jar</a></pre>
                        </div>

                    </div>
                </div>
            </div>

        </div>
        <!-- /.container -->

    </div>
    <!-- Get Started -->

    <a class="anchor" name="concept"></a>
    <div class="content-section-b">

        <div class="container-fluid">

            <div class="row">
                <div class="col-lg-push-7 col-lg-5 col-sm-push-6  col-sm-6">
                    <hr class="section-heading-spacer">
                    <div class="clearfix"></div>
                    <h2 class="section-heading">Rich, Concise and Readable APIs</h2>
                    <p class="lead">Maximize the power of Java 8 Lambda expressions and method references with
                        rich APIs directly available on your collections.
                    </p>
                </div>
                <div class="col-lg-pull-5 col-lg-7 col-sm-pull-6  col-sm-6">
                    <ul class="nav nav-tabs">
                        <li class="active"><a href="#method" data-toggle="tab">Eclipse Collections w/ Method Ref</a></li>
                        <li><a href="#ec" data-toggle="tab">Eclipse Collections w/ Lambda expression</a></li>
                        <li><a href="#streams" data-toggle="tab">Java 8 Streams</a></li>
                    </ul>
                    <div id="ec-vs-streams" class="tab-content">
                        <div class="tab-pane fade in active" id="method">
                            <pre  class="prettyprint lang-java">
boolean anyPeopleHaveCats =
  this.people
    .anySatisfyWith(Person::hasPet, PetType.CAT);

int countPeopleWithCats =
  this.people
    .countWith(Person::hasPet, PetType.CAT);

MutableList&lt;Person&gt; peopleWithCats =
  this.people
    .selectWith(Person::hasPet, PetType.CAT)</pre>
                        </div>
                        <div class="tab-pane fade" id="ec">
                            <pre  class="prettyprint lang-java">
boolean anyPeopleHaveCats =
  this.people
    .anySatisfy(person -> person.hasPet(PetType.CAT));

int countPeopleWithCats =
  this.people
    .count(person -> person.hasPet(PetType.CAT));

MutableList&lt;Person&gt; peopleWithCats =
  this.people
    .select(person -> person.hasPet(PetType.CAT));</pre>
                        </div>
                        <div class="tab-pane fade" id="streams">
                            <pre  class="prettyprint lang-java">
boolean anyPeopleHaveCats =
  this.people
    .stream()
    .anyMatch(person -> person.hasPet(PetType.CAT));

long countPeopleWithCats =
  this.people
    .stream()
    .filter(person -> person.hasPet(PetType.CAT))
    .count();

List&lt;Person&gt; peopleWithCats =
  this.people
    .stream()
    .filter(person -> person.hasPet(PetType.CAT))
    .collect(Collectors.toList());</pre>
                        </div>
                    </div>
                    <!-- /.tab-content -->
                </div>
                <!-- /.col -->
            </div>
            <!-- /.row -->

        </div>
        <!-- /.container -->

    </div>
    <!-- Rich and fluent API -->

    <div class="content-section-a">

        <div class="container-fluid">

            <div class="row">
                <div class="col-lg-5 col-sm-6">
                    <hr class="section-heading-spacer">
                    <div class="clearfix"></div>
                    <h2 class="section-heading">Many container types including <br>immutable collections, primitive collections, bimaps, multimaps and bags</h2>
                    <p class="lead">You can make use of various container types, leveraging handy factory methods for instantiation.</p>
                </div>
                <div class="col-lg-7 col-sm-6">
                    <ul class="nav nav-tabs">
                        <li class="active"><a href="#mutable" data-toggle="tab">Mutable collections</a></li>
                        <li><a href="#immutable" data-toggle="tab">Immutable collections</a></li>
                        <li><a href="#primitives" data-toggle="tab">Primitive collections</a></li>
                    </ul>
                    <div id="container-types" class="tab-content">
                        <div class="tab-pane fade in active" id="mutable">
                            <pre  class="prettyprint lang-java">
//Initializing mutable list with empty(), of(), with() method
MutableList&lt;String&gt; mutableListEmpty =
  Lists.mutable.empty();
MutableList&lt;String&gt; mutableListOf =
  Lists.mutable.of("One", "One", "Two", "Three");
MutableList&lt;String&gt; mutableListWith =
  Lists.mutable.with("One", "One", "Two", "Three");

//Various container types available
MutableSet&lt;String&gt; mutableSet =
  Sets.mutable.with("One", "One", "Two", "Three");
MutableBag&lt;String&gt; mutableBag =
  Bags.mutable.with("One", "One", "Two", "Three");
MutableStack&lt;String&gt; mutableStack =
  Stacks.mutable.with("One", "One", "Two", "Three");
MutableMap&lt;String, String&gt; mutableMap =
  Maps.mutable.with("key1", "value1", "key2", "value2", "key3", "value3");
MutableMultimap&lt;String, String&gt; multimapWithList =
  Multimaps.mutable.list.with("key1", "value1-1", "key1", "value1-2", "key2","value2-1");
MutableBiMap&lt;String, String&gt; mutableBiMap =
  BiMaps.mutable.with("key1", "value1", "key2", "value2", "key3", "value3");</pre>
                        </div>
                        <div class="tab-pane fade" id="immutable">
                            <pre  class="prettyprint lang-java">
//Initializing immutable list with empty(), of(), with() method
ImmutableList&lt;String&gt; immutableListEmpty =
  Lists.immutable.empty();
ImmutableList&lt;String&gt; immutableListOf =
  Lists.immutable.of("One", "One", "Two", "Three");
ImmutableList&lt;String&gt; immutableListWith =
  Lists.immutable.with("One", "One", "Two", "Three");

//Various container types available
ImmutableSet&lt;String&gt; immutableSet =
  Sets.immutable.with("One", "One", "Two", "Three");
ImmutableBag&lt;String&gt; immutableBag =
  Bags.immutable.with("One", "One", "Two", "Three");
ImmutableStack&lt;String&gt; immutableStack =
  Stacks.immutable.with("One", "One", "Two", "Three");
ImmutableMap&lt;String, String&gt; immutableMap =
  Maps.immutable.with("key1", "value1", "key2", "value2", "key3", "value3");
ImmutableMultimap&lt;String, String&gt; immutableMultimapWithList =
  Multimaps.immutable.list.with("key1", "value1-1", "key1", "value1-2", "key2","value2-1");
ImmutableBiMap&lt;String, String&gt; immutableBiMap =
  BiMaps.immutable.with("key1", "value1", "key2", "value2", "key3", "value3");</pre>
                        </div>
                        <div class="tab-pane fade" id="primitives">
                            <pre  class="prettyprint lang-java">
//Mutable and immutable Lists, Sets, Bags, Stacks and Maps are available for all 8 primitive types
MutableIntList intList =
  IntLists.mutable.of(1, 2, 3);
MutableLongList longList =
  LongLists.mutable.of(1L, 2L, 3L);
MutableCharList charList =
  CharLists.mutable.of('a', 'b', 'c');
MutableShortList shortList =
  ShortLists.mutable.of((short)1, (short)2, (short)3);
MutableByteList byteList =
  ByteLists.mutable.of((byte)1, (byte)2, (byte)3);
MutableBooleanList booleanList =
  BooleanLists.mutable.of(true, false);
MutableFloatList floatList =
  FloatLists.mutable.of(1.0f, 2.0f, 3.0f);
MutableDoubleList doubleList =
  DoubleLists.mutable.of(1.0, 2.0, 3.0);

//You can create a ranged ints with IntInterval
IntInterval oneTo10 =
  IntInterval.fromTo(1, 10); // ints from 1 to 10
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
IntInterval oneTo10By3 =
  IntInterval.fromToBy(1, 10, 3); // ints from 1 to 10 step by 3
// [1, 4, 7, 10]
IntInterval oddsFrom1To10 =
  IntInterval.oddsFromTo(1, 10); // odd ints from 1 to 10
// [1, 3, 5, 7, 9]
IntInterval evensFrom1To10 =
  IntInterval.evensFromTo(1, 10); // even ints from 1 to 10
// [2, 4, 6, 8, 10]</pre>
                        </div>
                    </div>
                    <!-- /.tab-content -->
                </div>
                <!-- /.col -->
            </div>
            <!-- /.row -->

        </div>
        <!-- /.container -->

    </div>
    <!-- Container Types -->

    <a class="anchor" name="memory"></a>
    <div class="content-section-b">

        <div class="container-fluid">

            <div class="row">
                <div class="col-lg-push-6 col-lg-6 col-sm-push-6 col-sm-6">
                    <hr class="section-heading-spacer">
                    <div class="clearfix"></div>
                    <h2 class="section-heading">Reduce memory footprint <br>with memory efficient containers</h2>
                    <p class="lead">Eclipse Collections provides memory efficient implementation of Sets and Maps as well as primitive collections. </p>
                </div>
                <div class="col-lg-pull-6 col-lg-6 col-sm-pull-6 col-sm-6">
                    <ul class="nav nav-tabs">
                        <li class="active"><a href="#set" data-toggle="tab">Sets</a></li>
                        <li><a href="#map" data-toggle="tab">Maps</a></li>
                        <li><a href="#ints" data-toggle="tab">Primitive Collections</a></li>
                    </ul>
                    <div id="memory" class="tab-content">
                        <div class="tab-pane fade in active" id="set">
                            <img class="img-responsive" src="img/set.png" alt="">
                        </div>
                        <div class="tab-pane fade" id="map">
                            <img class="img-responsive" src="img/map.png" alt="">
                        </div>
                        <div class="tab-pane fade" id="ints">
                            <img class="img-responsive" src="img/ints.png" alt="">
                        </div>
                    </div>
                </div>
            </div>

        </div>
        <!-- /.container -->

    </div>
    <!-- Memory footprint -->

    <a class="anchor" name="learn"></a>
    <div class="content-section-a">

        <div class="container-fluid">

            <div class="row">
                <div class="col-lg-5 col-sm-6">
                    <hr class="section-heading-spacer">
                    <div class="clearfix"></div>
                    <h2 class="section-heading">Learn Eclipse Collections with Kata</h2>
                    <p class="lead">
                        Check out the <a href="https://github.com/eclipse/eclipse-collections-kata">Eclipse Collections Kata</a>, a fun way to help you learn idiomatic Eclipse Collections usage.
                        This particular kata is set up as a series of unit tests which fail.
                        Your task is to make them pass, using Eclipse Collections.
                    </p>
                </div>
                <div class="col-lg-7 col-sm-6">
                    <ul class="nav nav-tabs">
                        <li class="active"><a href="#exercise" data-toggle="tab">Sample Exercise</a></li>
                        <li><a href="#solution" data-toggle="tab">Sample Solution</a></li>
                    </ul>
                    <div class="tab-content">
                        <div class="tab-pane fade in active" id="exercise">
                            <pre  class="prettyprint lang-java">
@Test
public void getFirstNamesOfAllPeople()
{
  MutableList&lt;Person&gt; people = this.people;
  MutableList&lt;String&gt; firstNames = null; //Replace null, with a transformation method on MutableList.
  MutableList&lt;String&gt; expectedFirstNames =
    Lists.mutable.with("Mary", "Bob", "Ted", "Jake", "Barry", "Terry", "Harry", "John");
  Assert.assertEquals(expectedFirstNames, firstNames);
}</pre>
                        </div>
                        <div class="tab-pane fade" id="solution">
                            <pre  class="prettyprint lang-java">
@Test
public void getFirstNamesOfAllPeople()
{
  MutableList&lt;Person&gt; people = this.people;
  MutableList&lt;String&gt; firstNames = people.collect(Person::getFirstName);
  MutableList&lt;String&gt; expectedFirstNames =
    Lists.mutable.with("Mary", "Bob", "Ted", "Jake", "Barry", "Terry", "Harry", "John");
  Assert.assertEquals(expectedFirstNames, firstNames);
}</pre>
                        </div>
                    </div>
                    <!-- /.tab-content -->
                </div>
                <!-- /.col -->
            </div>
            <!-- /.row -->

        </div>
        <!-- /.container -->

    </div>
    <!-- Kata -->

    <a class="anchor" name="history"></a>
    <div class="content-section-b">

        <div class="container-fluid">

            <h2 class="section-heading">History of Eclipse Collections</h2>
            <p class="lead">
                The origin of Eclipse Collections was started off as a collections framework named Caramel at Goldman Sachs in 2004.

                Since then the framework has evolved, and in 2012, it was open sourced to GitHub as a project called
                <a href="https://github.com/goldmansachs/gs-collections">GS Collections</a>.
                <br><br>
                GS Collections has been presented at number of
                <a href="https://github.com/eclipse/eclipse-collections/wiki/Conference-talks-and-meetups">conferences</a>
                including JVM Summit in 2012 and JavaOne in 2014.
                A performance comparison between the parallel lazy implementations of Java 8, Scala and GS Collections was presented at
                <a href="http://www.infoq.com/presentations/java-streams-scala-parallel-collections">QCon New York</a> in 2014.
                Also <a href="https://github.com/eclipse/eclipse-collections/wiki/Articles">articles</a> about GS Collections
                (<a href="http://www.infoq.com/articles/GS-Collections-by-Example-1">Part1</a> /
                <a href="http://www.infoq.com/articles/GS-Collections-by-Example-2">Part2</a>)
                have published on InfoQ.com
                showing some of the capabilities of the collections framework through examples, and also interviews to the creator of GS Collections.
                <br><br>

                Over the years, around 40 or so developers from the same company have contributed to the collections framework.
                <br><br>

                To maximize the best nature of open source project, GS Collections has been migrated to the Eclipse Foundation, re-branded as Eclipse Collections in 2015.
                Now the framework is fully open to the community, accepting contributions!
            </p>
        </div>
    </div>
    <!-- History  -->

    <a class="anchor" name="refGuide"></a>
    <div class="content-section-a">
        <div class="container-fluid">
            <h2 class="section-heading">Reference Guide</h2>
            <p class="lead">
                A comprehensive reference guide of the library is available on GitHub:
                <a href="https://github.com/eclipse/eclipse-collections/blob/master/docs/guide.md#eclipse-collections-reference-guide">Reference Guide</a>.
            </p>
        </div>
        <!-- /.container -->

    </div>
    <!-- Reference Guide  -->

    <a class="anchor" name="sourceCode"></a>
    <div class="content-section-b">
        <div class="container-fluid">
            <h2 class="section-heading">Source Code</h2>
            <p class="lead">
                Source code can be found on GitHub: <a href="https://github.com/eclipse/eclipse-collections">Eclipse Collections</a>.
            </p>
        </div>
        <!-- /.container -->
    </div>
    <!-- Source Code  -->

    <a class="anchor" name="contribute"></a>
    <div class="content-footer">

        <div class="container-fluid">

            <div class="row">
                <div class="col-lg-4 col-sm-4">
                    <h3>Contribute</h3>
                    <p class="regular">
                        We welcome contributions!
                        <br><br>
                        Eclipse Collections Project Roadmap can be found <a href="https://github.com/eclipse/eclipse-collections/wiki/Roadmap">here</a>.
                        <br><br>
                        We accept contributions via pull requests in GitHub.
                        Please see <a href="https://github.com/eclipse/eclipse-collections/blob/master/CONTRIBUTING.md">How To Contribute</a> to get started.
                    </p>
                </div>
                <div class="col-lg-4 col-sm-4">
                    <h3>Latest News</h3>
                    <p class="regular">Eclipse Collections 10.2.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/10.2.0">released</a> <a class="light">(Feb 11th 2020)</a></p>
                    <p class="regular">Eclipse Collections 10.1.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/10.1.0">released</a> <a class="light">(Dec 4th 2019)</a></p>
                    <p class="regular">Eclipse Collections 10.0.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/10.0.0">released</a> <a class="light">(Jul 10th 2019)</a></p>
                    <p class="regular">Eclipse Collections 9.2.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/9.2.0">released</a> <a class="light">(May 20th 2018)</a></p>
                    <p class="regular">Eclipse Collections 9.1.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/9.1.0">released</a> <a class="light">(Jan 1st 2018)</a></p>
                    <p class="regular">Eclipse Collections 9.0.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/9.0.0">released</a> <a class="light">(Sep 21nd 2017)</a></p>
                    <p class="regular">Eclipse Collections 8.2.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/8.2.0">released</a> <a class="light">(Jun 22nd 2017)</a></p>
                    <p class="regular">Eclipse Collections 8.1.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/8.1.0">released</a> <a class="light">(Mar 16th 2017)</a></p>
                    <p class="regular">Eclipse Collections 8.0.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/8.0.0">released</a> <a class="light">(Sep 8th 2016)</a></p>
                </div>
                <div class="col-lg-4 col-sm-4">
                    <h3>Community Links</h3>
                        <p class="regular">Eclipse PMI: <a href="https://projects.eclipse.org/projects/technology.collections">eclipse project management infrastructure</a></p>
                        <p class="regular">GitHub: <a href="https://github.com/eclipse/eclipse-collections">eclipse-collections</a></p>
                        <p class="regular">Issues: <a href="https://github.com/eclipse/eclipse-collections/issues">GitHub issues</a></p>
                        <p class="regular">Mailing lists: <a href="https://dev.eclipse.org/mailman/listinfo/collections-dev">collections-dev</a> mailing list</p>
                        <p class="regular">Wiki: <a href="https://github.com/eclipse/eclipse-collections/wiki">GitHub wiki</a></p>
                        <p class="regular">Forum: <a href="https://www.eclipse.org/forums/index.php?t=thread&amp;frm_id=329">Eclipse Collections Forum</a></p>
                        <p class="regular">StackOverflow: tag with <a href="http://stackoverflow.com/questions/tagged/eclipse-collections">eclipse-collections</a></p>
                </div>
                <!-- /.col -->
            </div>
            <!-- /.row -->

        </div>
        <!-- /.container -->

    </div>
    <!-- Container Types -->


    <div class="banner">

        <div class="container-fluid">

            <div class="row">
                <div class="col-lg-12">
                    <h3>- More features, less waste -</h3>
                </div>
            </div>

        </div>
        <!-- /.container -->

    </div>
    <!-- /.banner -->

    <!-- Footer -->
    <footer>
        <div class="container-fluid">
            <div class="row">
                <div class="col-lg-12">
                    <ul class="list-inline">
                        <li>
                            <p class="copyright text-muted small">Copyright &copy; 2018 The Eclipse Foundation. All Rights Reserved. </p>
                        </li>
                        <li class="footer-menu-divider">&sdot;</li>
                        <li>
                            <a class="small" href="http://www.eclipse.org">Eclipse Foundation</a>
                        </li>
                        <li class="footer-menu-divider">&sdot;</li>
                        <li>
                            <a class="small" href="http://www.eclipse.org/legal">Legal</a>
                        </li>
                        <li class="footer-menu-divider">&sdot;</li>
                        <li>
                            <a class="small" href="http://www.eclipse.org/legal/privacy.php">Privacy</a>
                        </li>
                        <li class="footer-menu-divider">&sdot;</li>
                        <li>
                            <a class="small" href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a>
                        </li>
                        <li class="footer-menu-divider">&sdot;</li>
                        <li>
                            <a class="small" href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </footer>

    <!-- jQuery -->
    <script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha256-KXn5puMvxCw+dAYznun+drMdG1IFl3agK0p/pqT9KAo= sha512-2e8qq0ETcfWRI4HJBzQiA3UoyFk6tbNyG+qSaIBZLyW9Xf3sWZHN/lxe9fTh1U45DpPf07yj94KsUHHWe4Yk1A==" crossorigin="anonymous"></script>

    <!-- Google Code Prettify -->
    <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script>
</body>

</html>
