1. 介紹
可分割疊代器,用來把原來的對象元素進行分割和周遊,也可能會修改元素。可以用
tryAdvance
來操作一個元素,可以用
forEachRemaining
來批量操作元素。Spliterator可以用
trySplit
來分割元素,傳回另一個Spliterator,用在并發操作中,相當于遞歸,分而治之。如果Spliterator不能分割或者分割後元素非常不均衡或者是效率差,将不會從并發操作中受益。
Spliterator有一些特征:ORDERED,DISTINCT,SORTED,SIZED,NONNULL,IMMUTABLE,CONCURRENT,SUBSIZED,這些特征會作為交集表現出來。某些特征也限制了某些方法的操作。
jdk1.8加入
2. tryAdvance
boolean tryAdvance(Consumer<? super T> action);
如果有其它元素,對一個元素執行action
3. forEachRemaining
default void forEachRemaining(Consumer<? super T> action) {
do { } while (tryAdvance(action));
}
對于剩餘的元素,在目前線程中按序執行action
4. trySplist
<T> trySplit();
如果這個spliterator可以被分割,傳回分割後的疊代器,疊代器會包含目前的一部分元素,如果不能被分割,傳回null
5. estimateSize
long estimateSize();
傳回目前要處理的元素的數量,如果為無窮大或者未知的或者無法計算,傳回Long.MAX_VALUE
6. getExactSizeIfKnown
default long getExactSizeIfKnown() {
return (characteristics() & SIZED) == 0 ? -1L : estimateSize();
}
如果特征為
SIZED
傳回
estimateSize
否則傳回
-1
7. characteristics
int characteristics();
傳回集合的特征。通過判斷集合的特征,可以更好的做運算
8. hasCharacteristics
default boolean hasCharacteristics(int characteristics) {
return (characteristics() & characteristics) == characteristics;
}
集合是否擁有某個特征
9. getComparator
default Comparator<? super T> getComparator() {
throw new IllegalStateException();
}
如果疊代器的源是
SORTED
,如果有
Comparator
傳回原來的,如果沒有傳回null,如果不是
SORTED
抛出異常
10. ofPrimitive
public interface OfPrimitive<T, T_CONS, T_SPLITR extends Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>>
extends Spliterator<T> {
@Override
T_SPLITR trySplit();
@SuppressWarnings("overloads")
boolean tryAdvance(T_CONS action);
@SuppressWarnings("overloads")
default void forEachRemaining(T_CONS action) {
do { } while (tryAdvance(action));
}
}
包裝了一下