一、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/zh-tw/n/153976.html