Skip to content

@nikhilnanivadekar nikhilnanivadekar released this Jul 15, 2019 · 1 commit to master since this release

This is the 10.0.0 major release.
Central theme of this release is addition of new APIs, features as requested by the community and decrease Tech Debt.
This is our yearly major release.

New Functionality

  • Changed collection factories to be services that get loaded by the ServiceLoader in the API package.
  • Changed RichIterable.groupByUniqueKey() so that it's target extends MutableMapIterable instead of MutableMap.
  • Implemented UnmodifiableMutableOrderedMap.
  • Added <primitive1><primitive2>To<primitive1>Function.
  • Added specialized MultiReader interfaces for List, Set and Bag to improve the interface hierarchy.
  • Implemented RichIterable.getAny().
  • Implemented RichIterable.countByEach().
  • Implemented RichIterable.toMap() with target.
  • Implemented RichIterable.toBiMap().
  • Implemented MutableMapIterable.removeIf().
  • Implemented MutableMapIterable.removeAllKeys().
  • Implemented Bag.collectWithOccurrences(ObjectIntToObjectFunction).
  • Implemented Multimap.collectKeyMultiValues().
  • Implemented MutableMultimap.getIfAbsentPutAll().
  • Implemented UnifiedSetWithHashingStrategy.addOrReplace(Object).
  • Implemented LazyIterate.cartesianProduct().
  • Added override for replaceAll() and sort() on List implementations.
  • Implemented fromStream(Stream) on Mutable Collection Factories and Immutable Collection Factories.
  • Implemented ImmutableSortedBagMultimapFactory for Multimaps
  • Implemented HashingStrategySets.ofInitialCapacity() and HashingStrategySets.withInitialCapacity().
  • Implemented a Map factory method that takes a Map as a parameter
  • Implemented PrimitiveIterable.reduce() and PrimitiveIterable.reduceIfEmpty().
  • Implemented PrimitiveList.primitiveStream().
  • Implemented PrimitiveMap.updateValues().
  • Implemented factory methods to convert Iterable<BoxedPrimitive> to PrimitiveList, PrimitiveSet, PrimitiveBag, PrimitiveStack.
  • Implemented ofInitialCapacity() and withInitialCapacity() to Primitive Map Factories.
  • Added ability to create ObjectPrimitiveMap, PrimitiveObjectMap, PrimitivePrimitiveMap from Iterable.

Optimizations

  • Revamped and standardized resize/rehash for all primitive hash structures.

Bug Fixes

  • Fixed ImmutableDoubletonMap.flipUniqueValues() to throw exception when it has duplicates.
  • Added missing toSentinel() calls in UnifiedSet.put(), UnifiedSetWithHashingStrategy.put().
  • Added validation in FastList for initial capacity < 0.

Tech Debt Reduction

  • Fixed SerializeTestHelper to use try-with-resources.
  • Reduced duplicate readlock and writelock code in MultiReaderFastList, MultiReaderHashBag and MultiReaderUnifiedSet.
  • Replaced Apache commons-codec by Java 8 Base64 in Verify.
  • Added missing bounded wildcards on generic types.
  • Added wildcard types in MutableMapIterable.putPair(), MutableMapIterable.add(), MutableMultimap.putAllPairs() and MutableMultimap.add().
  • Fixed generics on MultiReaderFastList.newList().
  • Added overrides for methods in MutableOrderedMap.
  • Fixed assignment order in constructor of IntIntervalSpliterator.
  • Removed unnecessary casts, redundant type arguments.
  • Fixed invalid cast in UnifiedSet.trimToSize().
  • Changed Boxed result array to Primitive array to avoid unnecessary boxing in Primitive reduce.
  • Fixed several inspection violations, checkstyle violations and static analysis violations to increase code hygiene.
  • Fixed incorrect org.eclipse.collections.api.list api doc.
  • Fixed Javadoc lint errors, legacy Javadoc to update references to Eclipse Collections.
  • Moved implementations for forEach(), toSortedListBy(), toSortedSetBy(), toSortedBagsBy(), toSortedMapBy(), toArray(), countBy(), countByWith(), selectUnique(), flatCollectWith(), reverseForEach(), reverseForEachWithIndex() as default methods to interfaces.
  • Moved implementations for tap(), select(), selectWith(), reject(), rejectWith(), collect(), collectWith(), collectIf(), flatCollect(), toImmutable(), toReversed(), reverseThis(), shuffleThis() to MutableList as default implementations.
  • Removed default implementations for RichIterable.toSortedMapBy(), MutableListFactory.ofInitialCapacity(), selectUnique() from all Bag interfaces viz. Bag, ImmutableBag, ImmutableBagIterable, ImmutablePrimitiveBag, ImmutableSortedBag, MutableBag, MutableBagIterable, MutablePrimitiveBag, MutableSortedBag, PrimitiveBag, SortedBag, UnsortedBag. These were added to allow inclusion in minor release.
  • Changed collection constructor factories from enums to singleton classes.
  • Upgraded CollectPrimitiveProcedure to be generated at build time by using stg file.
  • Added SerializationTest for CollectPrimitiveProcedure.
  • Added test coverage for IntInterval, MultiReaderHashBag, CharAdapter, CodePointAdapter, CodePointList, Lists, Primitive Factories, RichIterable.minOptional(), RichIterable.maxOptional(), RichIterable.zip(), MapIterable.detectOptional, MapIterable.detectWithOptional and MutableMapIterable.removeIf().
  • Updated IntListJMHTest to include benchmarks using IntStream.
  • Reduced benchmark errors by consuming every object created in a benchmark to avoid DCE.

Removed Functionality

  • Removed unused ant build module.
  • Removed deprecated classes marked for removal: SummaryStatistics, SerializableIntSummaryStatistics, SerializableLongSummaryStatistics, and SerializableDoubleSummaryStatistics.

Build Changes

  • Added Javadoc build for pull requests to ensure correct CI.
  • Upgraded maven plugins for build time stability.
  • Updated Tycho Version to 1.3.0.
  • Configured Travis to run maven using the maven wrapper.
  • Fixed 'maven install' for newer versions of Java by using maven profiles to link modules with the version of Java that can build them.
  • Fixed maven pluginRepositories settings to include maven central.
  • Fixed Travis builds to cache the maven local cache without including Eclipse Collections jars.
  • Removed EclipseCollectionsCodeGenerator Task.
  • Removed unused dependencies from maven build.
  • Removed obsolete maven prerequisites.
  • Customized IntelliJ maven argline settings.
  • Turned on Eclipse Collections Code Generator plugin on configuration for Eclipse IDE.

Breaking Changes

Warning: These changes are already mentioned above. The list below might not be exhaustive, make sure to test your application and usages to verify.

  • Changed groupByUniqueKey() so that it's target extends MutableMapIterable instead of MutableMap. This breaks binary compatibility.
  • Added missing bounded wildcards on generic types.
  • Removed deprecated classes marked for removal: SummaryStatistics, SerializableIntSummaryStatistics, SerializableLongSummaryStatistics, and SerializableDoubleSummaryStatistics.
  • Removed default implementations for RichIterable.toSortedMapBy(), MutableListFactory.ofInitialCapacity(), selectUnique() from all Bag interfaces viz. Bag, ImmutableBag, ImmutableBagIterable, ImmutablePrimitiveBag, ImmutableSortedBag, MutableBag, MutableBagIterable, MutablePrimitiveBag, MutableSortedBag, PrimitiveBag, SortedBag, UnsortedBag. These were added to allow inclusion in minor release.
  • Upgraded CollectPrimitiveProcedure to be generated at build time by using stg file. This might break serialization.
  • Added validation in FastList for initial capacity < 0.
  • Fixed ImmutableDoubletonMap.flipUniqueValues() to throw exception when it has duplicates.

Acquiring Eclipse Collections

Maven

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections-api</artifactId>
  <version>10.0.0</version>
</dependency>

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections</artifactId>
  <version>10.0.0</version>
</dependency>

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections-testutils</artifactId>
  <version>10.0.0</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections-forkjoin</artifactId>
  <version>10.0.0</version>
</dependency>

Gradle

compile 'org.eclipse.collections:eclipse-collections-api:10.0.0'
compile 'org.eclipse.collections:eclipse-collections:10.0.0'
testCompile 'org.eclipse.collections:eclipse-collections-testutils:10.0.0'
compile 'org.eclipse.collections:eclipse-collections-forkjoin:10.0.0'

Ivy

<dependency org="org.eclipse.collections" name="eclipse-collections-api" rev="10.0.0" />
<dependency org="org.eclipse.collections" name="eclipse-collections" rev="10.0.0" />
<dependency org="org.eclipse.collections" name="eclipse-collections-testutils" rev="10.0.0" />
<dependency org="org.eclipse.collections" name="eclipse-collections-forkjoin" rev="10.0.0"/>

OSGi Bundle

Eclipse software repository location: http://download.eclipse.org/collections/10.0.0/repository

Assets 2
May 3, 2019
Jenkins Git plugin tagging with 10.0.0.M3
Sep 18, 2018
Jenkins Git plugin tagging with 10.0.0.M2
Sep 17, 2018
Jenkins Git plugin tagging with 10.0.0.M1

@nikhilnanivadekar nikhilnanivadekar released this May 21, 2018 · 283 commits to master since this release

This is the 9.2.0 minor release. This release was entirely driven by the Eclipse Collections user community. The main theme of this release was to add functionalities suggested by the community and bug fixes for a few critical issues reported by the users.

New Functionality

  • Implemented flatCollectWith() on RichIterable.
  • Implemented toSortedMapBy() on RichIterable.
  • Implemented Bag#selectDuplicates().
  • Implemented Bag#selectUnique().
  • Implemented OrderedMapAdapter, the first implementation of MutableOrderedMap.
  • Implemented chunk() on Primitive Iterables.
  • Implemented newEmpty() on MutablePrimitiveCollection.
  • Implemented PrimitiveBag#selectDuplicates().
  • Implemented PrimitiveBag#selectUnique().
  • Implemented toStringOfItemToCount() on Primitive Bags.
  • Added MultiReader factories to Sets factory.
  • Added MultiReader factories to Bags factory.
  • Implemented summarizeDouble(), summarizeFloat(), summarizeLong(), summarizeInt on Procedures2.
  • Implemented aggregateBy() on Collectors2.
  • Implemented countByEach() on Collectors2.
  • Implemented assertPostSerializedEqualsHashCodeAndToString() on Verify.
  • Added jcstress-based tests for Concurrent Collections.

Optimizations

  • Optimized zip() by pre-sizing target.
  • Optimized UnifiedMap#detectOptional(org.eclipse.collections.api.block.predicate.Predicate2) to not use an iterator.
  • Optimized groupByUniqueKey() by pre-sizing the target maps.

Bug Fixes

  • Fixed PrimitiveHashSet#iterator()#remove() to not rehash.
  • Fixed PrimitiveHashMap#addToValue() to return correct value after rehash and grow.
  • Fixed ConcurrentHashMap#iterator() with size close to zero.
  • Fixed ConcurrentHashMapUnsafe#iterator() with size close to zero.
  • Fixed equals() and hashCode() in IntInterval to handle edge case for negative from, to, step.
  • Fixed invalid cast in UnifiedSet#trimToSize().
  • Fixed toImmutable(), asUnmodifiable() implementations in synchronized primitive collections and maps.

Tech Debt Reduction

  • Made Primitive Collections non-final.
  • Marked index methods non-final in UnifiedMap, UnifiedMapWithHashingStrategy, UnifiedSet and UnifiedSetWithHashingStrategy.
  • Marked HashingStrategy protected in UnifiedMapWithHashingStrategy and UnifiedSetWithHashingStrategy.
  • Updated UnifiedMap, UnifiedMapWithHashingStrategy, UnifiedSet and UnifiedSetWithHashingStrategy to use newEmpty().
  • Fixed static code analysis inspection violations.
  • Fixed Javadoc and whitespace formatting.
  • Removed unused imports from Primitive classes.
  • Removed redundant imports from Primitive classes.
  • Enabled CheckStyle analysis for generated code.
  • Removed unnecessary override in test for selectByOccurrences().
  • Removed Java-8 check from tests.
  • Added UnifiedMapWithHashingStrategyNoIteratorTest.

Library Upgrades

  • Upgraded JMH to 1.19
  • Upgraded CheckStyle to 8.8.
  • Upgraded JaCoCo to 0.8.0.

Acquiring Eclipse Collections

Maven

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections-api</artifactId>
  <version>9.2.0</version>
</dependency>

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections</artifactId>
  <version>9.2.0</version>
</dependency>

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections-testutils</artifactId>
  <version>9.2.0</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.eclipse.collections</groupId>
  <artifactId>eclipse-collections-forkjoin</artifactId>
  <version>9.2.0</version>
</dependency>

Gradle

compile 'org.eclipse.collections:eclipse-collections-api:9.2.0'
compile 'org.eclipse.collections:eclipse-collections:9.2.0'
testCompile 'org.eclipse.collections:eclipse-collections-testutils:9.2.0'
compile 'org.eclipse.collections:eclipse-collections-forkjoin:9.2.0'

Ivy

<dependency org="org.eclipse.collections" name="eclipse-collections-api" rev="9.2.0" />
<dependency org="org.eclipse.collections" name="eclipse-collections" rev="9.2.0" />
<dependency org="org.eclipse.collections" name="eclipse-collections-testutils" rev="9.2.0" />
<dependency org="org.eclipse.collections" name="eclipse-collections-forkjoin" rev="9.2.0"/>

OSGi Bundle

Eclipse software repository location: http://download.eclipse.org/collections/9.2.0/repository

Assets 2
You can’t perform that action at this time.