Eclipse Collections 10.3 Released
This is the release we’ve been waiting for.
Thank you to the community
Eclipse Collections 10.2 was released in February 2020 and was a relatively small bug fix release after the somewhat monumental 10.0 release. I am happy to say that six months later, the 10.3 release has a lot of new features submitted by our outstanding community of contributors.
Thank you so much to all of the contributors who donated their valuable time to making Eclipse Collections more feature rich and even higher quality. Your efforts are very much appreciated.
If you’re thinking about contributing to an open source project but aren’t sure, check out this great blog from one of our community contributors. In the blog Sirisha Pratha explains some of the benefits she has experienced as she has become an active contributor in the OSS community.
We are always looking for new contributors to join the Eclipse Collections community. Please consider contributing to Eclipse Collections if you are looking for a project to get started on your journey.
Recognition
Eclipse Collections received an amazing and humbling honor in a Java Magazine article in June when it was named one of “The 25 Greatest Java Apps Ever Written.”
The credit belongs to the entire Eclipse Collections community. Your hard work and patience contributing to this library is being recognized. Congratulations and thank you to our entire community. Keep up the great work! You all rock!
Loads of new features and several contributor blogs
There are so many features included in Eclipse Collections 10.3, that it is going to take me a bit longer to write good examples leveraging all of them. The good news is that I’ve already gotten some help from the community. Some contributors blogged about the features they added before I started writing this blog.
Dirk Fauth wrote a blog where he evaluated whether there would be any performance and memory improvements including Eclipse Collections in NatTable. He also raised an issue for a missing feature, contributed the feature, and then updated the blog!
I thanked Dirk for both the blog and code contribution, and he said something in response on Twitter that I found very inspirational.
IMHO this is the way OSS works. Use it, like it, write about it. Find an issue, report it, fix it, contribute back.
Well done, and well said! This is exactly the spirit of community that keeps me working happily in open source.
A suggestion for future releases and future bloggers
Feature blogging is something I would love to see more of in the future from contributors. This is a great way to make sure the features you contribute get discovered by other developers. This may in turn encourage developers to upgrade to the latest release. It is also a great way to help build your own personal brand, as I will link to your feature blogs from the release blog. I will also be happy to like and retweet your blog and thank you publicly for the contribution. You are saving me time explaining how the feature you added works in the release blog, so trust me I will be very thankful and happy to help socialize your hard work!
The Feature Summary
Features with blogs shared by contributors
AggregateBy
inMapIterable
to aggregate on key and value — by Alex GoldbergFlatCollect
into primitive collections — by Alex Goldberg- Implemented
Triples
— by Brian Vermeer - Support sorting of primitive lists by indirect comparison — by Vladimir Zakharov
- Implemented
MapIterable.getOrDefault()
to allow easy inter-op—by Nikhil Nanivadekar - ContainsBy on
RichIterable
— by Donald Raab
New Website Translation
Hindi Translation of Eclipse Collections website.
New Functionality
- Added
withMap()
to MutableMap. - Added
forEachInBoth
toListIterable
with javadoc. - Added new APIs
ofOccurrences
andwithOccurrences
, to bag mutable and immutable factories. - Added
wrapCopy()
to primitive lists to mirror functionality in FastList. - Added singly-linked implementation of immutable stacks.
- Added
withInitialCapacity()
to primitiveList
andSet
factories. - Added
toArray()
method to primitive iterables which takes an array as a parameter to store the elements of the iterable. - Added default
aggregateBy
method to RichIterable that takes a target Map. - Implemented
Tuples.identicalTwin()
,Tuples.identicalTriplet()
. - Added
shuffleThis()
operation to primitive lists. - Added
fromToExclusive
inInterval
. - Implemented
swap()
method on mutable primitive lists. - Implemented
subList()
onIntInterval
. - Introduced
pitest
mutation testing. - Implemented
LongInterval
. - Implemented
aggregateBy
forMapIterable
with a variant to aggregate on key and value. - Implemented Null Safe Comparators by Function.
Other Improvements
Documentation Updates
- Added badges to README.md for GitHub Actions build.
- Added
Working with GitHub
wiki page. - Added Javadocs for
immutableObjectPrimitiveMap
,immutablePrimitiveObjectMap
,immutablePrimitivePrimitiveMap
. - Added Javadocs for
mutableObjectPrimitiveMap
,mutablePrimitiveObjectMap
,mutablePrimitivePrimitiveMap
,mutablePrimitiveValuesMap
. - Added Javadocs for
primitiveObjectMaps
,primitivePrimitiveMaps
,primitiveValuesMaps
,objectPrimitiveMaps
. - Improved documentation of
Function2
,Function3
andMutableCollection#injectIntoWith
. - Added
README_EXAMPLES.md
. - Fixed Gradle dependency settings in website.
Bug Fixes
- Fixed size edge case issues in Interval and IntInterval.
- Fixed Javadoc warnings, code generation errors.
- Fixed inspections, line-wrapping and whitespace violations.
- Fixed symmetry issues with factory methods in Multimaps factory.
- Added CheckStyle checks for comma-separated lists that are partially wrapped.
Tech Debt Reduction
- Optimized
removeIf()
implementation onBooleanArrayList
. - Increased test coverage for
reduceIfEmpty
on primitive iterables,MapIterable.getIfAbsent*()
,MultimapsTest
. - Used
org.eclipse.collections.api.factory
instead oforg.eclipse.collections.impl.factory
wherever possible. - Made
primitive*HashMap.keySet()
serializable. - Made
sun.misc
an optional Import-Package in OSGi metadata. - Moved
primitiveSort.stg
to impl/utility. - Optimized collect methods for primitive Immutable Singleton
Bag
,Set
andList
. - Optimized implementations of
aggregateBy
in Bags to useforEachWithOccurrences
. - Pulled up
ListIterable.binarySearch()
,OrderedIterable.toStack()
,RichIterable.groupByUniqueKey()
,aggregateBy()
as default methods. - Implemented
with()
,without()
,withAll()
,withoutAll()
as default methods. - Refactored
PersonAndPetKatatTest
to use newer APIs. - Removed duplicate
forEach
overrides. - Created a simple utility to aid in Javadoc creation.
- Updated common primitive stack template for
BooleanArrayStack
code generation. - Used direct formulas to calculate
sum()
,mean()
, andaverage()
onIntInterval
. - Memoized
size()
value onIntInterval
andInterval
. - Optimized
toImmutable()
method on FastList and Primitive Lists to avoids creating a redundant array copy. - Added
@Override
annotations fortap()
(and onetoString()
) implementations.
Thank you
From all the contributors and committers to the entire Eclipse Collections community… thank you for using Eclipse Collections. We hope you enjoy all of the new features and improvements in the 10.3 release.
I am a Project Lead and Committer for the Eclipse Collections OSS project at the Eclipse Foundation. Eclipse Collections is open for contributions. If you like the library, you can let us know by starring it on GitHub.