Eclipse Collections comes with it’s own List, Set, and Map implementations. These implementations extend the JDK List, Set, and Map implementations for easy interoperability. In Eclipse Collections 10.3.0, I introduced a new API
MapIterable.getOrDefault(). In Java 8,
Map.getOrDefault() was introduced, so what makes it a new API for Eclipse Collections 10.3.0? Technically, it is new but not so new API! Consider the code snippets below, prior to Eclipse Collections 10.3.0:
As you can see in the code,
getOrDefault() available, however
ImmutableMap does not have it. But there is no reason why
ImmutableMap should not have this read-only API. I found that
MapIterable already had
getIfAbsentValue() which has the same behavior. Then why did I still add
MapIterable.getOrDefault() mainly for easy interoperability. Firstly, most Java developers will be aware of the
getOrDefault() method, only Eclipse Collections users would be aware of
getIfAbsentValue(). By providing the API same as the JDK it reduces the necessity to learn a new API. Secondly, even though
getOrDefault() is available on
MutableMap, it is not available on the highest
Map interface of Eclipse Collections. Thirdly, I got to learn a Java compiler check which I had not experienced before. I will elaborate this check a bit more in detail because I find it interesting.
After I added
Map interfaces in Eclipse Collections started giving compiler errors with messages like:
org.eclipse.collections.api.map.MutableMapIterable inherits unrelated defaults for getOrDefault(Object, V) from types org.eclipse.collections.api.map.MapIterable and java.util.Map. This I thought was cool, because at compile time, the Java compiler is ensuring that if there is an API with default implementation in more than one interface in a multi-interface scenario, then Java will not decide which implementation to pick but rather throw compiler errors. Hence, Java ensures at compile time that there is no ambiguity regarding which implementation will be used at runtime. How awesome is that?!? In order to fix the compile time errors, I had to add a default implementations on the interfaces which gave the errors. I always believe in Compiler Errors are better than Runtime Exceptions.
Post Eclipse Collections 10.3.0 the below code samples will work:
Eclipse Collections 10.3.0 was released on 08/08/2020 and is one of our most feature packed releases. The release constitutes numerous contributions from the Java community.
Show your support star us on GitHub.
Eclipse Collections Resources:
Eclipse Collections comes with it’s own implementations of List, Set and Map. It also has additional data structures like Multimap, Bag and an entire Primitive Collections hierarchy. Each of our collections have a rich API for commonly required iteration patterns.