一、spliterator方法
spliterator是Java 8中新增的一个接口,它提供了遍历和分割数据元素的功能,可以被任何线程使用,该接口包括以下方法:
default Spliterator trySplit() {}
该方法将元素进行分割并返回新的spliterator对象。
long estimateSize() {}
该方法用于估算spliterator对象还剩下多少元素需要遍历,如果estimateSize返回负数,则表示spliterator对象包含未知数量的元素。
default int characteristics() {}
该方法返回一个位掩码,表示当前spliterator对象的特性。
boolean tryAdvance(Consumer action) {}
该方法用于遍历当前spliterator对象中的下一个元素。
二、spliterator用法
一般情况下,spliterator的用法可以分为以下两类:
1. 集合类中的spliterator用法
集合类中的spliterator用法是调用Collection的spliterator方法返回一个spliterator对象,通过遍历spliterator对象实现对集合元素的遍历。
示例代码:
List list = new ArrayList();
list.add("apple");
list.add("banana");
list.add("orange");
Spliterator spliterator = list.spliterator();
spliterator.forEachRemaining(System.out::println);
输出结果:
apple
banana
orange
2. 自定义spliterator用法
自定义spliterator用法是实现Spliterator接口创建一个自定义的spliterator对象,用于对自定义数据结构中的元素进行遍历。
示例代码:
class MySpliterator implements Spliterator<String> {
private String[] words;
private int start;
private int end;
public MySpliterator(String[] words, int start, int end) {
this.words = words;
this.start = start;
this.end = end;
}
@Override
public boolean tryAdvance(Consumer<? super String> action) {
if (start < end) {
action.accept(words[start++]);
return true;
}
return false;
}
@Override
public Spliterator<String> trySplit() {
int mid = (start + end) / 2;
if (mid == start) {
return null;
}
Spliterator<String> left = new MySpliterator(words, start, mid);
start = mid;
return left;
}
@Override
public long estimateSize() {
return end - start;
}
@Override
public int characteristics() {
return Spliterator.ORDERED | Spliterator.IMMUTABLE;
}
}
String[] words = {"apple", "banana", "orange", "lemon", "grape"};
MySpliterator spliterator = new MySpliterator(words, 0, words.length);
StreamSupport.stream(spliterator, false).forEach(System.out::println);
输出结果:
apple
banana
orange
lemon
grape
三、spliterator翻译、spliterator读音
spliterator的翻译为“分割迭代器”,其读音为/splɪtəreɪtə/。
四、spliteratorUnknownSize
spliteratorUnknownSize可以通过Spliterators类的方法创建一个拥有未知大小的spliterator对象。例如:
Spliterator<String> spliterator = Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED);
该方法的第一个参数为Iterator对象,第二个参数为位掩码,表示spliterator对象的特性。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/153976.html