spliterator

package
v1.2.116 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2024 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

A sequence of elements supporting sequential and parallel aggregate operations. The following example illustrates an aggregate operation using SEE java/util/function/Consumer.java

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Characteristic

type Characteristic int
const (
	CharacteristicTODO Characteristic = 0x00000000
	/**
	 * Characteristic value signifying that an encounter order is defined for
	 * elements. If so, this Spliterator guarantees that method
	 * {@link #trySplit} splits a strict prefix of elements, that method
	 * {@link #tryAdvance} steps by one element in prefix order, and that
	 * {@link #forEachRemaining} performs actions in encounter order.
	 *
	 * <p>A {@link Collection} has an encounter order if the corresponding
	 * {@link Collection#iterator} documents an order. If so, the encounter
	 * order is the same as the documented order. Otherwise, a collection does
	 * not have an encounter order.
	 *
	 * @apiNote Encounter order is guaranteed to be ascending index order for
	 * any {@link List}. But no order is guaranteed for hash-based collections
	 * such as {@link HashSet}. Clients of a Spliterator that reports
	 * {@code ORDERED} are expected to preserve ordering constraints in
	 * non-commutative parallel computations.
	 */
	CharacteristicOrdered Characteristic = 0x00000010

	/**
	 * Characteristic value signifying that, for each pair of
	 * encountered elements {@code x, y}, {@code !x.equals(y)}. This
	 * applies for example, to a Spliterator based on a {@link Set}.
	 */
	CharacteristicDistinct Characteristic = 0x00000001

	/**
	 * Characteristic value signifying that encounter order follows a defined
	 * sort order. If so, method {@link #getComparator()} returns the associated
	 * Comparator, or {@code null} if all elements are {@link Comparable} and
	 * are sorted by their natural ordering.
	 *
	 * <p>A Spliterator that reports {@code SORTED} must also report
	 * {@code ORDERED}.
	 *
	 * @apiNote The spliterators for {@code Collection} classes in the JDK that
	 * implement {@link NavigableSet} or {@link SortedSet} report {@code SORTED}.
	 */
	CharacteristicSorted Characteristic = 0x00000004

	/**
	 * Characteristic value signifying that the value returned from
	 * {@code estimateSize()} prior to traversal or splitting represents a
	 * finite size that, in the absence of structural source modification,
	 * represents an exact count of the number of elements that would be
	 * encountered by a complete traversal.
	 *
	 * @apiNote Most Spliterators for Collections, that cover all elements of a
	 * {@code Collection} report this characteristic. Sub-spliterators, such as
	 * those for {@link HashSet}, that cover a sub-set of elements and
	 * approximate their reported size do not.
	 */
	CharacteristicSized Characteristic = 0x00000040

	/**
	 * Characteristic value signifying that the source guarantees that
	 * encountered elements will not be {@code null}. (This applies,
	 * for example, to most concurrent collections, queues, and maps.)
	 */
	CharacteristicNonnulL Characteristic = 0x00000100

	/**
	 * Characteristic value signifying that the element source cannot be
	 * structurally modified; that is, elements cannot be added, replaced, or
	 * removed, so such changes cannot occur during traversal. A Spliterator
	 * that does not report {@code IMMUTABLE} or {@code CONCURRENT} is expected
	 * to have a documented policy (for example throwing
	 * {@link ConcurrentModificationException}) concerning structural
	 * interference detected during traversal.
	 */
	CharacteristicImmutable Characteristic = 0x00000400

	/**
	 * Characteristic value signifying that the element source may be safely
	 * concurrently modified (allowing additions, replacements, and/or removals)
	 * by multiple threads without external synchronization. If so, the
	 * Spliterator is expected to have a documented policy concerning the impact
	 * of modifications during traversal.
	 *
	 * <p>A top-level Spliterator should not report both {@code CONCURRENT} and
	 * {@code SpliteratorSIZED}, since the finite size, if known, may change if the source
	 * is concurrently modified during traversal. Such a Spliterator is
	 * inconsistent and no guarantees can be made about any computation using
	 * that Spliterator. Sub-spliterators may report {@code SpliteratorSIZED} if the
	 * sub-split size is known and additions or removals to the source are not
	 * reflected when traversing.
	 *
	 * <p>A top-level Spliterator should not report both {@code CONCURRENT} and
	 * {@code IMMUTABLE}, since they are mutually exclusive. Such a Spliterator
	 * is inconsistent and no guarantees can be made about any computation using
	 * that Spliterator. Sub-spliterators may report {@code IMMUTABLE} if
	 * additions or removals to the source are not reflected when traversing.
	 *
	 * @apiNote Most concurrent collections maintain a consistency policy
	 * guaranteeing accuracy with respect to elements present at the point of
	 * Spliterator construction, but possibly not reflecting subsequent
	 * additions or removals.
	 */
	CharacteristicConcurrent Characteristic = 0x00001000

	/**
	 * Characteristic value signifying that all Spliterators resulting from
	 * {@code trySplit()} will be both {@link #SpliteratorSIZED} and {@link #SUBSIZED}.
	 * (This means that all child Spliterators, whether direct or indirect, will
	 * be {@code SpliteratorSIZED}.)
	 *
	 * <p>A Spliterator that does not report {@code SpliteratorSIZED} as required by
	 * {@code SUBSIZED} is inconsistent and no guarantees can be made about any
	 * computation using that Spliterator.
	 *
	 * @apiNote Some spliterators, such as the top-level spliterator for an
	 * approximately balanced binary tree, will report {@code SpliteratorSIZED} but not
	 * {@code SUBSIZED}, since it is common to know the size of the entire tree
	 * but not the exact sizes of subtrees.
	 */
	CharacteristicSubsized Characteristic = 0x00004000
)

type EmptySpliterator

type EmptySpliterator struct {
	TODO
}

func NewEmptySpliterator

func NewEmptySpliterator() *EmptySpliterator

func (*EmptySpliterator) Characteristics

func (split *EmptySpliterator) Characteristics() Characteristic

func (*EmptySpliterator) EstimateSize

func (split *EmptySpliterator) EstimateSize() int

func (*EmptySpliterator) ForEachRemaining

func (split *EmptySpliterator) ForEachRemaining(ctx context.Context, consumer consumer.Consumer)

func (*EmptySpliterator) TryAdvance

func (split *EmptySpliterator) TryAdvance(ctx context.Context, consumer consumer.Consumer) bool

func (*EmptySpliterator) TrySplit

func (split *EmptySpliterator) TrySplit() Spliterator

type OfPrimitive

type OfPrimitive struct {
	TODO
}

func NewOfPrimitive

func NewOfPrimitive() *OfPrimitive

func (*OfPrimitive) ForEachRemaining

func (split *OfPrimitive) ForEachRemaining(ctx context.Context, action consumer.Consumer)

*

  • Performs the given action for each remaining element, sequentially in
  • the current thread, until all elements have been processed or the
  • action throws an exception. If this Spliterator is {@link #ORDERED},
  • actions are performed in encounter order. Exceptions thrown by the
  • action are relayed to the caller. *
  • @implSpec
  • The default implementation repeatedly invokes {@link #tryAdvance}
  • until it returns {@code false}. It should be overridden whenever
  • possible. *
  • @param action The action
  • @throws NullPointerException if the specified action is null

func (*OfPrimitive) TryAdvance

func (split *OfPrimitive) TryAdvance(ctx context.Context, action consumer.Consumer) bool

*

  • If a remaining element exists, performs the given action on it,
  • returning {@code true}; else returns {@code false}. If this
  • Spliterator is {@link #ORDERED} the action is performed on the
  • next element in encounter order. Exceptions thrown by the
  • action are relayed to the caller. *
  • @param action The action
  • @return {@code false} if no remaining elements existed
  • upon entry to this method, else {@code true}.
  • @throws NullPointerException if the specified action is null

func (*OfPrimitive) TrySplit

func (split *OfPrimitive) TrySplit() Spliterator

type Spliterator

type Spliterator interface {
	/**
	 * If a remaining element exists, performs the given action on it,
	 * returning {@code true}; else returns {@code false}.  If this
	 * Spliterator is {@link #ORDERED} the action is performed on the
	 * next element in encounter order.  Exceptions thrown by the
	 * action are relayed to the caller.
	 *
	 * @param action The action
	 * @return {@code false} if no remaining elements existed
	 * upon entry to this method, else {@code true}.
	 * @throws NullPointerException if the specified action is null
	 */
	TryAdvance(ctx context.Context, consumer consumer.Consumer) bool

	/**
	 * Performs the given action for each remaining element, sequentially in
	 * the current thread, until all elements have been processed or the action
	 * throws an exception.  If this Spliterator is {@link #ORDERED}, actions
	 * are performed in encounter order.  Exceptions thrown by the action
	 * are relayed to the caller.
	 *
	 * @implSpec
	 * The default implementation repeatedly invokes {@link #tryAdvance} until
	 * it returns {@code false}.  It should be overridden whenever possible.
	 *
	 * @param action The action
	 * @throws NullPointerException if the specified action is null
	 */
	ForEachRemaining(ctx context.Context, consumer consumer.Consumer)

	/**
	 * If this spliterator can be partitioned, returns a Spliterator
	 * covering elements, that will, upon return from this method, not
	 * be covered by this Spliterator.
	 *
	 * <p>If this Spliterator is {@link #ORDERED}, the returned Spliterator
	 * must cover a strict prefix of the elements.
	 *
	 * <p>Unless this Spliterator covers an infinite number of elements,
	 * repeated calls to {@code trySplit()} must eventually return {@code null}.
	 * Upon non-null return:
	 * <ul>
	 * <li>the value reported for {@code estimateSize()} before splitting,
	 * must, after splitting, be greater than or equal to {@code estimateSize()}
	 * for this and the returned Spliterator; and</li>
	 * <li>if this Spliterator is {@code SUBSIZED}, then {@code estimateSize()}
	 * for this spliterator before splitting must be equal to the sum of
	 * {@code estimateSize()} for this and the returned Spliterator after
	 * splitting.</li>
	 * </ul>
	 *
	 * <p>This method may return {@code null} for any reason,
	 * including emptiness, inability to split after traversal has
	 * commenced, data structure constraints, and efficiency
	 * considerations.
	 *
	 * @apiNote
	 * An ideal {@code trySplit} method efficiently (without
	 * traversal) divides its elements exactly in half, allowing
	 * balanced parallel computation.  Many departures from this ideal
	 * remain highly effective; for example, only approximately
	 * splitting an approximately balanced tree, or for a tree in
	 * which leaf nodes may contain either one or two elements,
	 * failing to further split these nodes.  However, large
	 * deviations in balance and/or overly inefficient {@code
	 * trySplit} mechanics typically result in poor parallel
	 * performance.
	 *
	 * @return a {@code Spliterator} covering some portion of the
	 * elements, or {@code null} if this spliterator cannot be split
	 */
	TrySplit() Spliterator

	EstimateSize() int

	/**
	 * Convenience method that returns {@link #estimateSize()} if this
	 * Spliterator is {@link #SpliteratorSIZED}, else {@code -1}.
	 * @implSpec
	 * The default implementation returns the result of {@code estimateSize()}
	 * if the Spliterator reports a characteristic of {@code SpliteratorSIZED}, and
	 * {@code -1} otherwise.
	 *
	 * @return the exact size, if known, else {@code -1}.
	 */
	GetExactSizeIfKnown() int

	Characteristics() Characteristic

	/**
	 * Returns {@code true} if this Spliterator's {@link
	 * #characteristics} contain all of the given characteristics.
	 *
	 * @implSpec
	 * The default implementation returns true if the corresponding bits
	 * of the given characteristics are set.
	 *
	 * @param characteristics the characteristics to check for
	 * @return {@code true} if all the specified characteristics are present,
	 * else {@code false}
	 */
	HasCharacteristics(characteristics Characteristic) bool

	/**
	 * If this Spliterator's source is {@link #SORTED} by a {@link Comparator},
	 * returns that {@code Comparator}. If the source is {@code SORTED} in
	 * {@linkplain Comparable natural order}, returns {@code null}.  Otherwise,
	 * if the source is not {@code SORTED}, throws {@link IllegalStateException}.
	 *
	 * @implSpec
	 * The default implementation always throws {@link IllegalStateException}.
	 *
	 * @return a Comparator, or {@code null} if the elements are sorted in the
	 * natural order.
	 * @throws IllegalStateException if the spliterator does not report
	 *         a characteristic of {@code SORTED}.
	 */
	GetComparator() object.Comparator
}

*

  • An object for traversing and partitioning elements of a source. The source
  • of elements covered by a Spliterator could be, for example, an array, a
  • {@link Collection}, an IO channel, or a generator function. *
  • <p>A Spliterator may traverse elements individually ({@link
  • #tryAdvance tryAdvance()}) or sequentially in bulk
  • ({@link #forEachRemaining forEachRemaining()}). *
  • <p>A Spliterator may also partition off some of its elements (using
  • {@link #trySplit}) as another Spliterator, to be used in
  • possibly-parallel operations. Operations using a Spliterator that
  • cannot split, or does so in a highly imbalanced or inefficient
  • manner, are unlikely to benefit from parallelism. Traversal
  • and splitting exhaust elements; each Spliterator is useful for only a single
  • bulk computation. *
  • <p>A Spliterator also reports a set of {@link #characteristics()} of its
  • structure, source, and elements from among {@link #ORDERED},
  • {@link #SpliteratorDISTINCT}, {@link #SORTED}, {@link #SpliteratorSIZED}, {@link #NONNULL},
  • {@link #IMMUTABLE}, {@link #CONCURRENT}, and {@link #SUBSIZED}. These may
  • be employed by Spliterator clients to control, specialize or simplify
  • computation. For example, a Spliterator for a {@link Collection} would
  • report {@code SpliteratorSIZED}, a Spliterator for a {@link Set} would report
  • {@code SpliteratorDISTINCT}, and a Spliterator for a {@link SortedSet} would also
  • report {@code SORTED}. Characteristics are reported as a simple unioned bit
  • set. *
  • Some characteristics additionally constrain method behavior; for example if
  • {@code ORDERED}, traversal methods must conform to their documented ordering.
  • New characteristics may be defined in the future, so implementors should not
  • assign meanings to unlisted values. *
  • <p><a id="binding">A Spliterator that does not report {@code IMMUTABLE} or
  • {@code CONCURRENT} is expected to have a documented policy concerning:
  • when the spliterator <em>binds</em> to the element source; and detection of
  • structural interference of the element source detected after binding.</a> A
  • <em>late-binding</em> Spliterator binds to the source of elements at the
  • point of first traversal, first split, or first query for estimated size,
  • rather than at the time the Spliterator is created. A Spliterator that is
  • not <em>late-binding</em> binds to the source of elements at the point of
  • construction or first invocation of any method. Modifications made to the
  • source prior to binding are reflected when the Spliterator is traversed.
  • After binding a Spliterator should, on a best-effort basis, throw
  • {@link ConcurrentModificationException} if structural interference is
  • detected. Spliterators that do this are called <em>fail-fast</em>. The
  • bulk traversal method ({@link #forEachRemaining forEachRemaining()}) of a
  • Spliterator may optimize traversal and check for structural interference
  • after all elements have been traversed, rather than checking per-element and
  • failing immediately. *
  • <p>Spliterators can provide an estimate of the number of remaining elements
  • via the {@link #estimateSize} method. Ideally, as reflected in characteristic
  • {@link #SpliteratorSIZED}, this value corresponds exactly to the number of elements
  • that would be encountered in a successful traversal. However, even when not
  • exactly known, an estimated value may still be useful to operations
  • being performed on the source, such as helping to determine whether it is
  • preferable to split further or traverse the remaining elements sequentially. *
  • <p>Despite their obvious utility in parallel algorithms, spliterators are not
  • expected to be thread-safe; instead, implementations of parallel algorithms
  • using spliterators should ensure that the spliterator is only used by one
  • thread at a time. This is generally easy to attain via <em>serial
  • thread-confinement</em>, which often is a natural consequence of typical
  • parallel algorithms that work by recursive decomposition. A thread calling
  • {@link #trySplit()} may hand over the returned Spliterator to another thread,
  • which in turn may traverse or further split that Spliterator. The behaviour
  • of splitting and traversal is undefined if two or more threads operate
  • concurrently on the same spliterator. If the original thread hands a
  • spliterator off to another thread for processing, it is best if that handoff
  • occurs before any elements are consumed with {@link #tryAdvance(Consumer)
  • tryAdvance()}, as certain guarantees (such as the accuracy of
  • {@link #estimateSize()} for {@code SpliteratorSIZED} spliterators) are only valid before
  • traversal has begun. *
  • <p>Primitive subtype specializations of {@code Spliterator} are provided for
  • {@link OfInt int}, {@link OfLong long}, and {@link OfDouble double} values.
  • The subtype default implementations of
  • {@link Spliterator#tryAdvance(java.util.function.Consumer)}
  • and {@link Spliterator#forEachRemaining(java.util.function.Consumer)} box
  • primitive values to instances of their corresponding wrapper class. Such
  • boxing may undermine any performance advantages gained by using the primitive
  • specializations. To avoid boxing, the corresponding primitive-based methods
  • should be used. For example,
  • {@link Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)}
  • and {@link Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)}
  • should be used in preference to
  • {@link Spliterator.OfInt#tryAdvance(java.util.function.Consumer)} and
  • {@link Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)}.
  • Traversal of primitive values using boxing-based methods
  • {@link #tryAdvance tryAdvance()} and
  • {@link #forEachRemaining(java.util.function.Consumer) forEachRemaining()}
  • does not affect the order in which the values, transformed to boxed values,
  • are encountered. *
  • @apiNote
  • <p>Spliterators, like {@code Iterator}s, are for traversing the elements of
  • a source. The {@code Spliterator} API was designed to support efficient
  • parallel traversal in addition to sequential traversal, by supporting
  • decomposition as well as single-element iteration. In addition, the
  • protocol for accessing elements via a Spliterator is designed to impose
  • smaller per-element overhead than {@code Iterator}, and to avoid the inherent
  • race involved in having separate methods for {@code hasNext()} and
  • {@code next()}. *
  • <p>For mutable sources, arbitrary and non-deterministic behavior may occur if
  • the source is structurally interfered with (elements added, replaced, or
  • removed) between the time that the Spliterator binds to its data source and
  • the end of traversal. For example, such interference will produce arbitrary,
  • non-deterministic results when using the {@code java.util.stream} framework. *
  • <p>Structural interference of a source can be managed in the following ways
  • (in approximate order of decreasing desirability):
  • <ul>
  • <li>The source cannot be structurally interfered with.
  • <br>For example, an instance of
  • {@link java.util.concurrent.CopyOnWriteArrayList} is an immutable source.
  • A Spliterator created from the source reports a characteristic of
  • {@code IMMUTABLE}.</li>
  • <li>The source manages concurrent modifications.
  • <br>For example, a key set of a {@link java.util.concurrent.ConcurrentHashMap}
  • is a concurrent source. A Spliterator created from the source reports a
  • characteristic of {@code CONCURRENT}.</li>
  • <li>The mutable source provides a late-binding and fail-fast Spliterator.
  • <br>Late binding narrows the window during which interference can affect
  • the calculation; fail-fast detects, on a best-effort basis, that structural
  • interference has occurred after traversal has commenced and throws
  • {@link ConcurrentModificationException}. For example, {@link ArrayList},
  • and many other non-concurrent {@code Collection} classes in the JDK, provide
  • a late-binding, fail-fast spliterator.</li>
  • <li>The mutable source provides a non-late-binding but fail-fast Spliterator.
  • <br>The source increases the likelihood of throwing
  • {@code ConcurrentModificationException} since the window of potential
  • interference is larger.</li>
  • <li>The mutable source provides a late-binding and non-fail-fast Spliterator.
  • <br>The source risks arbitrary, non-deterministic behavior after traversal
  • has commenced since interference is not detected.
  • </li>
  • <li>The mutable source provides a non-late-binding and non-fail-fast
  • Spliterator.
  • <br>The source increases the risk of arbitrary, non-deterministic behavior
  • since non-detected interference may occur after construction.
  • </li>
  • </ul> *
  • <p><b>Example.</b> Here is a class (not a very useful one, except
  • for illustration) that maintains an array in which the actual data
  • are held in even locations, and unrelated tag data are held in odd
  • locations. Its Spliterator ignores the tags. *
  • <pre> {@code
  • class TaggedArray<T> {
  • private final Object[] elements; // immutable after construction
  • TaggedArray(T[] data, Object[] tags) {
  • int size = data.length;
  • if (tags.length != size) throw new IllegalArgumentException();
  • this.elements = new Object[2 * size];
  • for (int i = 0, j = 0; i < size; ++i) {
  • elements[j++] = data[i];
  • elements[j++] = tags[i];
  • }
  • } *
  • public Spliterator<T> spliterator() {
  • return new TaggedArraySpliterator<>(elements, 0, elements.length);
  • } *
  • static class TaggedArraySpliterator<T> implements Spliterator<T> {
  • private final Object[] array;
  • private int origin; // current index, advanced on split or traversal
  • private final int fence; // one past the greatest index *
  • TaggedArraySpliterator(Object[] array, int origin, int fence) {
  • this.array = array; this.origin = origin; this.fence = fence;
  • } *
  • public void forEachRemaining(Consumer<? super T> action) {
  • for (; origin < fence; origin += 2)
  • action.accept((T) array[origin]);
  • } *
  • public boolean tryAdvance(Consumer<? super T> action) {
  • if (origin < fence) {
  • action.accept((T) array[origin]);
  • origin += 2;
  • return true;
  • }
  • else // cannot advance
  • return false;
  • } *
  • public Spliterator<T> trySplit() {
  • int lo = origin; // divide range in half
  • int mid = ((lo + fence) >>> 1) & ~1; // force midpoint to be even
  • if (lo < mid) { // split out left half
  • origin = mid; // reset this Spliterator's origin
  • return new TaggedArraySpliterator<>(array, lo, mid);
  • }
  • else // too small to split
  • return null;
  • } *
  • public long estimateSize() {
  • return (long)((fence - origin) / 2);
  • } *
  • public int characteristics() {
  • return ORDERED | SpliteratorSIZED | IMMUTABLE | SUBSIZED;
  • }
  • }
  • }}</pre> *
  • <p>As an example how a parallel computation framework, such as the
  • {@code java.util.stream} package, would use Spliterator in a parallel
  • computation, here is one way to implement an associated parallel forEach,
  • that illustrates the primary usage idiom of splitting off subtasks until
  • the estimated amount of work is small enough to perform
  • sequentially. Here we assume that the order of processing across
  • subtasks doesn't matter; different (forked) tasks may further split
  • and process elements concurrently in undetermined order. This
  • example uses a {@link java.util.concurrent.CountedCompleter};
  • similar usages apply to other parallel task constructions. *
  • <pre>{@code
  • static <T> void parEach(TaggedArray<T> a, Consumer<T> action) {
  • Spliterator<T> s = a.spliterator();
  • long targetBatchSize = s.estimateSize() / (ForkJoinPool.getCommonPoolParallelism() * 8);
  • new ParEach(null, s, action, targetBatchSize).invoke();
  • } *
  • static class ParEach<T> extends CountedCompleter<Void> {
  • final Spliterator<T> spliterator;
  • final Consumer<T> action;
  • final long targetBatchSize; *
  • ParEach(ParEach<T> parent, Spliterator<T> spliterator,
  • Consumer<T> action, long targetBatchSize) {
  • super(parent);
  • this.spliterator = spliterator; this.action = action;
  • this.targetBatchSize = targetBatchSize;
  • } *
  • public void compute() {
  • Spliterator<T> sub;
  • while (spliterator.estimateSize() > targetBatchSize &&
  • (sub = spliterator.trySplit()) != null) {
  • addToPendingCount(1);
  • new ParEach<>(this, sub, action, targetBatchSize).fork();
  • }
  • spliterator.forEachRemaining(action);
  • propagateCompletion();
  • }
  • }}</pre> *
  • @implNote
  • If the boolean system property {@code org.openjdk.java.util.stream.tripwire}
  • is set to {@code true} then diagnostic warnings are reported if boxing of
  • primitive values occur when operating on primitive subtype specializations. *
  • @param <T> the type of elements returned by this Spliterator *
  • @see Collection
  • @since 1.8

func NewDelegatingSpliterator

func NewDelegatingSpliterator(supplier supplier.Supplier) Spliterator

func NewDistinctSpliterator

func NewDistinctSpliterator(s Spliterator) Spliterator

func NewDistinctSpliterator2

func NewDistinctSpliterator2(s Spliterator, seen *seenMap) Spliterator

func NewInfiniteSupplyingSpliterator

func NewInfiniteSupplyingSpliterator(size int, s supplier.Supplier) Spliterator

func NewSliceSpliterator2

func NewSliceSpliterator2(acs Characteristic, arrays ...interface{}) Spliterator

func NewSliceSpliterator4

func NewSliceSpliterator4(origin int, fence int, acs Characteristic, arrays ...interface{}) Spliterator

type TODO

type TODO struct {
	class.Class
}

func (*TODO) Characteristics

func (split *TODO) Characteristics() Characteristic

func (*TODO) EstimateSize

func (split *TODO) EstimateSize() int

func (*TODO) ForEachRemaining

func (split *TODO) ForEachRemaining(ctx context.Context, action consumer.Consumer)

func (*TODO) GetComparator

func (split *TODO) GetComparator() object.Comparator

func (*TODO) GetExactSizeIfKnown

func (split *TODO) GetExactSizeIfKnown() int

func (*TODO) HasCharacteristics

func (split *TODO) HasCharacteristics(characteristics Characteristic) bool

func (*TODO) TryAdvance

func (split *TODO) TryAdvance(action consumer.Consumer) bool

func (*TODO) TrySplit

func (split *TODO) TrySplit() Spliterator

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL