Class Spliterators.AbstractDoubleSpliterator
- All Implemented Interfaces:
Spliterator<Double>, Spliterator.OfDouble, Spliterator.OfPrimitive<Double, DoubleConsumer, Spliterator.OfDouble>
- Enclosing class:
Spliterators
Spliterator.OfDouble that implements
trySplit to permit limited parallelism.
To implement a spliterator an extending class need only
implement tryAdvance. The extending class should override
forEachRemaining
if it can provide a more performant implementation.
- API Note:
- This class is a useful aid for creating a spliterator when it is not
possible or difficult to efficiently partition elements in a manner
allowing balanced parallel computation.
An alternative to using this class, that also permits limited parallelism, is to create a spliterator from an iterator (see
Spliterators.spliterator(java.util.PrimitiveIterator.OfDouble, long, int). Depending on the circumstances using an iterator may be easier or more convenient than extending this class. For example, if there is already an iterator available to use then there is no need to extend this class. - Since:
- 1.8
- See Also:
-
Nested Class Summary
Nested classes/interfaces declared in interface Spliterator
Spliterator.OfDouble, Spliterator.OfInt, Spliterator.OfLong, Spliterator.OfPrimitive<T,T_CONS, T_SPLITR> Modifier and TypeInterfaceDescriptionstatic interfaceA Spliterator specialized fordoublevalues.static interfaceA Spliterator specialized forintvalues.static interfaceA Spliterator specialized forlongvalues.static interfaceSpliterator.OfPrimitive<T, T_CONS, T_SPLITR extends Spliterator.OfPrimitive<T,T_CONS, T_SPLITR>> A Spliterator specialized for primitive values. -
Field Summary
Fields declared in interface Spliterator
CONCURRENT, DISTINCT, IMMUTABLE, NONNULL, ORDERED, SIZED, SORTED, SUBSIZEDModifier and TypeFieldDescriptionstatic final intCharacteristic value signifying that the element source may be safely concurrently modified (allowing additions, replacements, and/or removals) by multiple threads without external synchronization.static final intCharacteristic value signifying that, for each pair of encountered elementsx, y,!x.equals(y).static final intCharacteristic 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.static final intCharacteristic value signifying that the source guarantees that encountered elements will not benull.static final intCharacteristic value signifying that an encounter order is defined for elements.static final intCharacteristic value signifying that the value returned fromestimateSize()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.static final intCharacteristic value signifying that encounter order follows a defined sort order.static final intCharacteristic value signifying that all Spliterators resulting fromtrySplit()will be bothSpliterator.SIZEDandSpliterator.SUBSIZED. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractDoubleSpliterator(long est, int additionalCharacteristics) Creates a spliterator reporting the given estimated size and characteristics. -
Method Summary
Modifier and TypeMethodDescriptionintReturns a set of characteristics of this Spliterator and its elements.longReturns an estimate of the number of elements that would be encountered by aSpliterator.forEachRemaining(Consumer)traversal, or returnsLong.MAX_VALUEif infinite, unknown, or too expensive to compute.trySplit()If this spliterator can be partitioned, returns a Spliterator covering elements, that will, upon return from this method, not be covered by this Spliterator.Methods declared in class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitModifier and TypeMethodDescriptionprotected Objectclone()Creates and returns a copy of this object.booleanIndicates whether some other object is "equal to" this one.protected voidfinalize()Deprecated, for removal: This API element is subject to removal in a future version.Finalization is deprecated and subject to removal in a future release.final Class<?> getClass()Returns the runtime class of thisObject.inthashCode()Returns a hash code value for this object.final voidnotify()Wakes up a single thread that is waiting on this object's monitor.final voidWakes up all threads that are waiting on this object's monitor.toString()Returns a string representation of the object.final voidwait()Causes the current thread to wait until it is awakened, typically by being notified or interrupted.final voidwait(long timeoutMillis) Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.final voidwait(long timeoutMillis, int nanos) Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.Methods declared in interface Spliterator
getComparator, getExactSizeIfKnown, hasCharacteristicsModifier and TypeMethodDescriptiondefault Comparator<? super Double> default longConvenience method that returnsSpliterator.estimateSize()if this Spliterator isSpliterator.SIZED, else-1.default booleanhasCharacteristics(int characteristics) Returnstrueif this Spliterator'sSpliterator.characteristics()contain all of the given characteristics.Methods declared in interface Spliterator.OfDouble
forEachRemaining, tryAdvanceModifier and TypeMethodDescriptiondefault voidforEachRemaining(Consumer<? super Double> action) 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.default booleantryAdvance(Consumer<? super Double> action) If a remaining element exists: performs the given action on it, returningtrue; else returnsfalse.Methods declared in interface Spliterator.OfPrimitive
forEachRemaining, tryAdvanceModifier and TypeMethodDescriptiondefault voidforEachRemaining(DoubleConsumer action) 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.booleantryAdvance(DoubleConsumer action) If a remaining element exists, performs the given action on it, returningtrue; else returnsfalse.
-
Constructor Details
-
AbstractDoubleSpliterator
protected AbstractDoubleSpliterator(long est, int additionalCharacteristics) Creates a spliterator reporting the given estimated size and characteristics.- Parameters:
est- the estimated size of this spliterator if known, otherwiseLong.MAX_VALUE.additionalCharacteristics- properties of this spliterator's source or elements. IfSIZEDis reported then this spliterator will additionally reportSUBSIZED.
-
-
Method Details
-
trySplit
If this spliterator can be partitioned, returns a Spliterator covering elements, that will, upon return from this method, not be covered by this Spliterator.If this Spliterator is
Spliterator.ORDERED, the returned Spliterator must cover a strict prefix of the elements.Unless this Spliterator covers an infinite number of elements, repeated calls to
trySplit()must eventually returnnull. Upon non-null return:- the value reported for
estimateSize()before splitting, must, after splitting, be greater than or equal toestimateSize()for this and the returned Spliterator; and - if this Spliterator is
SUBSIZED, thenestimateSize()for this spliterator before splitting must be equal to the sum ofestimateSize()for this and the returned Spliterator after splitting.
This method may return
nullfor any reason, including emptiness, inability to split after traversal has commenced, data structure constraints, and efficiency considerations. This implementation permits limited parallelism.- Specified by:
trySplitin interfaceSpliterator<Double>- Returns:
- a
Spliteratorcovering some portion of the elements, ornullif this spliterator cannot be split
- the value reported for
-
estimateSize
public long estimateSize()Returns an estimate of the number of elements that would be encountered by aSpliterator.forEachRemaining(Consumer)traversal, or returnsLong.MAX_VALUEif infinite, unknown, or too expensive to compute.If this Spliterator is
Spliterator.SIZEDand has not yet been partially traversed or split, or this Spliterator isSpliterator.SUBSIZEDand has not yet been partially traversed, this estimate must be an accurate count of elements that would be encountered by a complete traversal. Otherwise, this estimate may be arbitrarily inaccurate, but must decrease as specified across invocations ofSpliterator.trySplit().- Specified by:
estimateSizein interfaceSpliterator<Double>- Implementation Requirements:
- This implementation returns the estimated size as reported when created and, if the estimate size is known, decreases in size when split.
- Returns:
- the estimated size, or
Long.MAX_VALUEif infinite, unknown, or too expensive to compute.
-
characteristics
public int characteristics()Returns a set of characteristics of this Spliterator and its elements. The result is represented as ORed values fromSpliterator.ORDERED,Spliterator.DISTINCT,Spliterator.SORTED,Spliterator.SIZED,Spliterator.NONNULL,Spliterator.IMMUTABLE,Spliterator.CONCURRENT,Spliterator.SUBSIZED. Repeated calls tocharacteristics()on a given spliterator, prior to or in-between calls totrySplit, should always return the same result.If a Spliterator reports an inconsistent set of characteristics (either those returned from a single invocation or across multiple invocations), no guarantees can be made about any computation using this Spliterator.
- Specified by:
characteristicsin interfaceSpliterator<Double>- Implementation Requirements:
- This implementation returns the characteristics as reported when created.
- Returns:
- a representation of characteristics
-