<!DOCTYPE html>
<!--
  ~ Copyright (c) 2017 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]-->

    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-71645852-1', 'auto');
        ga('send', 'pageview');

    </script>

</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/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="ja/index.html">日本語</a></li>
                            <li><a href="ru/index.html">Русский</a></li>
                            <li><a href="pt-br/index.html">Português-Brasil</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;9.0.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;9.0.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:9.0.0'
compile 'org.eclipse.collections:eclipse-collections:9.0.0'</pre>
                        </div>
                        <div class="tab-pane fade" id="ivy">
                            <pre  class="prettyprint">
&lt;dependency org="org.eclipse.collections" name="eclipse-collections-api" rev="9.0.0" /&gt;
&lt;dependency org="org.eclipse.collections" name="eclipse-collections" rev="9.0.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/9.0.0">eclipse-collections-api-9.0.0.jar</a>
<a target="_blank" href="http://mvnrepository.com/artifact/org.eclipse.collections/eclipse-collections/9.0.0">eclipse-collections-9.0.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 created 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 i 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>

    <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>.
            </p>
        </div>
        <!-- /.container -->
    </div>
    <!-- Source Code  -->
    </div>
    <!-- Introduction  -->

    <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 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>
                    <p class="regular">Eclipse Collections 8.0.0-M1 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/8.0.0-M1">available</a> <a class="light">(Jul 6th 2016)</a></p>
                    <p class="regular">Eclipse Collections 7.1.0 <a href="https://github.com/eclipse/eclipse-collections/releases/tag/7.1.0">released</a> <a class="light">(Apr 8th 2016)</a></p>
                    <p class="regular"><a href="https://github.com/eclipse/eclipse-collections-kata">Eclipse Collections Kata</a> was presented at
                        <a href="https://www.eclipsecon.org/na2016/session/eclipse-collections-kata-fun-way-learn-feature-rich-collections-framework">
                            EclipseCon NA 2016
                        </a>
                        <a class="light">(Mar 7th 2016)</a>
                    </p>
                    <p class="regular">An <a href="http://www.infoq.com/news/2016/01/GS-Collections-Eclipse-Foundn">article</a> about Eclipse Collections published in InfoQ. <a class="light">(Jan 21th 2016)</a></p>
                    <p class="regular">Eclipse Collections was presented at
                        <a href="http://www.java-users.jp/?page_id=2064#GH-4">
                            JJUG CCC 2015 Fall
                        </a>
                        <a class="light">(Nov 28th 2015)</a>
                    </p>
                    <p class="regular">Eclipse Collections was presented at
                        <a href="https://www.eclipsecon.org/europe2015/session/eclipse-collections-example">
                            EclipseCon Europe 2015
                        </a>
                        <a class="light">(Nov 5th 2015)</a>
                    </p>
                    <p class="regular">Eclipse Collections was presented at
                        <a href="https://events.rainfocus.com/oow15/catalog/oracle.jsp?event=javaone&search=CON1091&search.event=javaoneEvent&search.day=20151029">
                            JavaOne 2015 San Francisco
                        </a>
                        <a class="light">(Oct 28th 2015)</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; 2016 The Eclipse Foundation. All Rights Reserved. </p>
                        </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</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>
