blob: 0d27b17c4313dc82d5c4bbf42de1a2d9a55652b1 [file] [log] [blame]
<!DOCTYPE html>
<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="">
<title>Eclipse Collections - More features, less waste. </title>
<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="css/landing-page.css" rel="stylesheet">
<!-- Custom Fonts -->
<link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=Roboto+Condensed:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
<!-- Google Code Prettify -->
<link href="google-code-prettify/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 onload="prettyPrint()">
<!-- 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>
<a class="navbar-brand topnav" href="#">Eclipse Collections</a>
</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="#history">History</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">Language <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="">English</a></li>
<li><a href="ja/index.html">Japanese</a></li>
</ul>
</li>
<li>
<a href="https://projects.eclipse.org/projects/technology.collections">
<img class="img-responsive" src="img/Egg-incubation.png" alt="Eclipse Incubation Egg">
</a>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container -->
</nav>
<!-- Header -->
<a 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">
<a name="start"></a><!--TODO: Bring it back to correct place once incubation logo is removed.-->
<h1>Eclipse <span style="font-weight: 400">Collections</span></h1>
<h3>- More features, less waste -</h3>
</div>
</div>
</div>
</div>
<!-- /.container -->
</div>
<!-- /.intro-header -->
<!-- Page Content -->
<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>
<a name="concept"></a><!--TODO: Bring it back to correct place once incubation logo is removed.-->
<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;7.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;7.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:7.0.0'
compile 'org.eclipse.collections:eclipse-collections:7.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="7.0.0" /&gt;
&lt;dependency org="org.eclipse.collections" name="eclipse-collections" rev="7.0.0" /&gt;</pre>
</div>
<div class="tab-pane fade" id="download">
<pre class="prettyprint">
<a href="">eclipse-collections-api-7.0.0.jar</a>
<a href="">eclipse-collections-7.0.0.jar</a></pre>
</div>
</div>
</div>
</div>
</div>
<!-- /.container -->
</div>
<!-- Get Started -->
<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;tring&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");</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; immultimapWithList
= Multimaps.immutable.list.with("key1", "value1-1", "key1", "value1-2", "key2","value2-1");</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 -->
<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>
<a name="history"></a><!--TODO: Bring it back to correct place once incubation logo is removed.-->
<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 -->
<div class="content-section-a">
<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.
<br><br>
There are <a href="https://github.com/eclipse/eclipse-collections/wiki/Articles">articles</a> 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.
To maximize the best nature of open source project, GS Collections has been migrated to Eclipse Foundation, re-branded as Eclipse Collections in 2015.
Now the framework if fully open to the community, accepting contributions!
</p>
<hr class="section-heading-spacer">
</div>
<!-- /.container -->
</div>
<!-- Introduction -->
<a 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 7.0.0 released <a class="light">(Jan 20th 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 Europ 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 PME: <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="js/jquery.js"></script>
<!-- Bootstrap Core JavaScript -->
<script src="js/bootstrap.min.js"></script>
<!-- Google Code Prettify -->
<script type="text/javascript" src="google-code-prettify/prettify.js "></script>
</body>
</html>