版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kang389110772/article/details/82823498
Spliterator的简单介绍
作用是为并行提供一个可切割的spliterator,然后可以并行处理。
tryAdvance方法和forEachRemaing方法
tryAdvance进行一次iterate并且判断是否有元素还存在
forEachRemaing是对剩下的元素都执行action
private static void arraySplitDemo() {
List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Spliterator<String> spliterator = list.spliterator();
spliterator.tryAdvance(System.out::println);
System.out.println("-- buld traversal");
spliterator.forEachRemaining(System.out::println);
System.out.println("--- attempting try advance again");
System.out.println(spliterator.tryAdvance(System.out::println));
}
trySplit方法
split分成两个,返回新的一个
List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Spliterator<String> s = list.spliterator();
Spliterator<String> s1 = s.trySplit();
s.forEachRemaining(System.out::println);
System.out.println("-- traversing the other half of the spliterator --- ");
s1.forEachRemaining(System.out::println);
characteristics() and hasCharacteristics()
这是对某种特性的集合是否拥有哪个特点进行判断
public static void main (String[] args) {
List<String> list = new ArrayList<>();
Spliterator<String> s = list.spliterator();
if(s.hasCharacteristics(Spliterator.ORDERED)){
System.out.println("ORDERED");
}
if(s.hasCharacteristics(Spliterator.DISTINCT)){
System.out.println("DISTINCT");
}
if(s.hasCharacteristics(Spliterator.SORTED)){
System.out.println("SORTED");
}
if(s.hasCharacteristics(Spliterator.SIZED)){
System.out.println("SIZED");
}
if(s.hasCharacteristics(Spliterator.CONCURRENT)){
System.out.println("CONCURRENT");
}
if(s.hasCharacteristics(Spliterator.IMMUTABLE)){
System.out.println("IMMUTABLE");
}
if(s.hasCharacteristics(Spliterator.NONNULL)){
System.out.println("NONNULL");
}
if(s.hasCharacteristics(Spliterator.SUBSIZED)){
System.out.println("SUBSIZED");
}
}
estimateSize() and getExactSizeIfKnown()
estimateSize() 返回一个Long姓的值,在元素数不尽或很难计算或者不知道的时候返回Long.MAX_VALUE
getExactSizeKnow() 如果这个spliterator有SIZED
的特点,那么就调用estimateSize()进行返回,否则返回-1