Skip to content

Commit

Permalink
Create primitiveStream methods for Int/Long/DoubleBag - eclipse#1455
Browse files Browse the repository at this point in the history
  • Loading branch information
Desislav-Petrov committed May 12, 2023
1 parent 00c126b commit edeca3b
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ import org.eclipse.collections.api.list.ListIterable;
import org.eclipse.collections.api.tuple.primitive.<name>IntPair;
import org.eclipse.collections.api.set.primitive.<name>Set;

<if(primitive.specializedStream)>
import java.util.Spliterator;
import java.util.stream.StreamSupport;
import java.util.stream.<name>Stream;
<endif>

/**
* This file was automatically generated from template file primitiveBag.stg.
*
Expand Down Expand Up @@ -134,6 +140,20 @@ public interface <name>Bag extends <name>Iterable
this.forEachWithOccurrences((each, occurrences) -> joiner.add(each + "=" + occurrences));
return joiner.toString();
}

<if(primitive.specializedStream)>
Spliterator.Of<name> spliterator();

default <name>Stream primitiveStream()
{
return StreamSupport.<type>Stream(this.spliterator(), false);
}

default <name>Stream primitiveParallelStream()
{
return StreamSupport.<type>Stream(this.spliterator(), true);
}
<endif>
}

>>
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ import org.eclipse.collections.api.tuple.primitive.<name>IntPair;
import org.eclipse.collections.impl.factory.Lists;
import org.eclipse.collections.api.set.primitive.Immutable<name>Set;
import org.eclipse.collections.impl.factory.primitive.<name>Sets;
<if(primitive.specializedStream)>
import java.util.Spliterator;
import java.util.Spliterators;
<endif>

/**
* Immutable<name>EmptyBag is an optimization for {@link Immutable<name>Bag} of size 0.
Expand Down Expand Up @@ -363,6 +367,14 @@ final class Immutable<name>EmptyBag implements Immutable<name>Bag, Serializable
{
return ImmutableEmpty<name>Iterator.INSTANCE;
}

<if(primitive.specializedStream)>
@Override
public Spliterator.Of<name> spliterator()
{
return Spliterators.empty<name>Spliterator();
}
<endif>
}

>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ import org.eclipse.collections.api.list.ImmutableList;
import org.eclipse.collections.api.tuple.primitive.<name>IntPair;
import org.eclipse.collections.api.set.primitive.Immutable<name>Set;
import org.eclipse.collections.impl.factory.primitive.<name>Sets;
<if(primitive.specializedStream)>
import java.util.Spliterator;
import java.util.Spliterators;
<endif>

/**
* Immutable<name>HashBag is the non-modifiable equivalent of {@link <name>HashBag}.
Expand Down Expand Up @@ -472,6 +476,14 @@ final class Immutable<name>HashBag implements Immutable<name>Bag, Serializable
return this.bag.toImmutable();
}
}

<if(primitive.specializedStream)>
@Override
public Spliterator.Of<name> spliterator()
{
return Spliterators.spliterator(this.delegate.toArray(), Spliterator.IMMUTABLE);
}
<endif>
}

>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ import org.eclipse.collections.api.tuple.primitive.<name>IntPair;
import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples;
import org.eclipse.collections.api.set.primitive.Immutable<name>Set;
import org.eclipse.collections.impl.factory.primitive.<name>Sets;
<if(primitive.specializedStream)>
import java.util.Spliterator;
import org.eclipse.collections.impl.stream.primitive.<name>SingletonSpliterator;
<endif>

/**
* Immutable<name>SingletonBag is an optimization for {@link Immutable<name>Bag} of size 1.
Expand Down Expand Up @@ -412,6 +416,14 @@ final class Immutable<name>SingletonBag implements Immutable<name>Bag, Serializa
{
return new Singleton<name>Iterator(element1);
}

<if(primitive.specializedStream)>
@Override
public Spliterator.Of<name> spliterator()
{
return new <name>SingletonSpliterator(this.element1);
}
<endif>
}

>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ import org.eclipse.collections.impl.set.mutable.primitive.<name>HashSet;
import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples;
import org.eclipse.collections.impl.factory.primitive.<name>Sets;
import org.eclipse.collections.api.set.primitive.Mutable<name>Set;
<if(primitive.specializedStream)>
import java.util.Spliterator;
import java.util.Spliterators;
<endif>

/**
* <name>HashBag is similar to {@link HashBag}, and is memory-optimized for <type> primitives.
Expand Down Expand Up @@ -881,6 +885,14 @@ public class <name>HashBag
this.canRemove = false;
}
}

<if(primitive.specializedStream)>
@Override
public Spliterator.Of<name> spliterator()
{
return Spliterators.spliterator(this.items.keySet().toArray(), Spliterator.SIZED);
}
<endif>
}

>>
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ import org.eclipse.collections.impl.collection.mutable.primitive.AbstractSynchro
import org.eclipse.collections.impl.factory.primitive.<name>Bags;
import org.eclipse.collections.impl.lazy.primitive.Lazy<name>IterableAdapter;
import org.eclipse.collections.api.set.primitive.Mutable<name>Set;
<if(primitive.specializedStream)>
import java.util.Spliterator;
import java.util.Spliterators;
<endif>

/**
* A synchronized view of a {@link Mutable<name>Bag}. It is imperative that the user manually synchronize on the collection when iterating over it using the
Expand Down Expand Up @@ -277,6 +281,17 @@ public class Synchronized<name>Bag
return this.getMutable<name>Bag().newEmpty();
}
}

<if(primitive.specializedStream)>
/**
* This function needs to be synchronized manually
*/
@Override
public Spliterator.Of<name> spliterator()
{
return this.getMutable<name>Bag().spliterator();
}
<endif>
}

>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ import org.eclipse.collections.api.tuple.primitive.<name>IntPair;
import org.eclipse.collections.impl.collection.mutable.primitive.AbstractUnmodifiable<name>Collection;
import org.eclipse.collections.impl.factory.primitive.<name>Bags;
import org.eclipse.collections.api.set.primitive.Mutable<name>Set;
<if(primitive.specializedStream)>
import java.util.Spliterator;
import java.util.Spliterators;
<endif>

/**
* This file was automatically generated from template file unmodifiablePrimitiveBag.stg.
Expand Down Expand Up @@ -184,6 +188,14 @@ public class Unmodifiable<name>Bag
{
return this.getMutable<name>Bag().newEmpty();
}

<if(primitive.specializedStream)>
@Override
public Spliterator.Of<name> spliterator()
{
return this.getMutable<name>Bag().spliterator();
}
<endif>
}

>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,17 @@ public abstract class AbstractImmutable<name>BagTestCase extends AbstractImmutab
String actual = this.newWith(<["100", "101", "101"]:(literal.(type))(); separator=", ">).toStringOfItemToCount();
Assert.assertTrue(("{" + <(literal.(type))("100")> + "=1, " + <(literal.(type))("101")> + "=2}").equals(actual) || ("{" + <(literal.(type))("101")> + "=2, " + <(literal.(type))("100")> + "=1}").equals(actual));
}

<if(primitive.specializedStream)>
@Test
public void stream()
{
Assert.assertEquals(this.newWith(), this.newWith(<name>Bags.immutable.empty().primitiveStream().toArray()));
Assert.assertEquals(this.newWith(<(literal.(type))("1")>), this.newWith(<name>Bags.immutable.of(<["1"]:(literal.(type))(); separator=", ">).primitiveStream().toArray()));
Assert.assertEquals(this.newWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">), this.newWith(Immutable<name>HashBag.newBagWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">).primitiveStream().toArray()));
}

<endif>
}

>>
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import org.junit.Assert;
import org.junit.Test;
import org.eclipse.collections.impl.factory.primitive.<name>Sets;
import org.eclipse.collections.api.set.primitive.Mutable<name>Set;
import org.eclipse.collections.impl.factory.primitive.<name>Bags;

/**
* JUnit test for {@link Mutable<name>Bag}.
Expand Down Expand Up @@ -400,6 +401,17 @@ public abstract class AbstractMutable<name>BagTestCase extends AbstractMutable<n
String actual = this.newWith(<["100", "101", "101"]:(literal.(type))(); separator=", ">).toStringOfItemToCount();
Assert.assertTrue(("{" + <(literal.(type))("100")> + "=1, " + <(literal.(type))("101")> + "=2}").equals(actual) || ("{" + <(literal.(type))("101")> + "=2, " + <(literal.(type))("100")> + "=1}").equals(actual));
}

<if(primitive.specializedStream)>
@Test
public void stream()
{
Assert.assertEquals(this.newWith(), this.newWith(<name>Bags.mutable.empty().primitiveStream().toArray()));
Assert.assertEquals(this.newWith(<(literal.(type))("1")>), this.newWith(<name>Bags.mutable.of(<["1"]:(literal.(type))(); separator=", ">).primitiveStream().toArray()));
Assert.assertEquals(this.newWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">), this.newWith(<name>HashBag.newBagWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">).primitiveStream().toArray()));
}

<endif>
}

>>

0 comments on commit edeca3b

Please sign in to comment.