Метод spliterator
Метод spliterator класса Stream возвращает
объект типа Spliterator, который предназначен
для последовательного и параллельного обхода элементов
потока. Параметров метод не принимает. Полученный
Spliterator можно использовать для перебора элементов
через методы tryAdvance и forEachRemaining,
а также для разделения потока на части через метод
trySplit. После вызова метода spliterator
исходный поток считается использованным, и повторно
его использовать нельзя.
Синтаксис
stream.spliterator()
Пример
Давайте получим Spliterator из потока и обойдём
все его элементы с помощью метода forEachRemaining:
import java.util.List;
import java.util.Spliterator;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<String> stream = List.of("a", "b", "c", "d", "e").stream();
Spliterator<String> spliterator = stream.spliterator();
spliterator.forEachRemaining(System.out::println);
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример
Давайте поочерёдно обойдём элементы потока с помощью
метода tryAdvance, который возвращает true,
пока в потоке есть элементы:
import java.util.List;
import java.util.Spliterator;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = List.of(1, 2, 3, 4, 5).stream();
Spliterator<Integer> spliterator = stream.spliterator();
while (spliterator.tryAdvance(System.out::println)) {
// elements are printed one by one
}
}
}
Результат выполнения кода:
1
2
3
4
5
Пример
Давайте разделим поток на две части с помощью метода
trySplit и обойдём каждую часть отдельно:
import java.util.List;
import java.util.Spliterator;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<String> stream = List.of("a", "b", "c", "d", "e").stream();
Spliterator<String> spliterator = stream.spliterator();
Spliterator<String> part = spliterator.trySplit();
System.out.println("first part:");
spliterator.forEachRemaining(System.out::println);
System.out.println("second part:");
part.forEachRemaining(System.out::println);
}
}
Результат выполнения кода:
"first part:"
"c"
"d"
"e"
"second part:"
"a"
"b"
Пример
Давайте узнаем характеристики потока, которые возвращает
метод characteristics объекта Spliterator:
import java.util.List;
import java.util.Spliterator;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<String> stream = List.of("a", "b", "c", "d", "e").stream();
Spliterator<String> spliterator = stream.spliterator();
System.out.println(spliterator.characteristics());
System.out.println(spliterator.estimateSize());
}
}
Результат выполнения кода:
16464
5
Смотрите также
-
метод
Stream,
который создаёт поток элементов -
метод
iterator,
который возвращает итератор для потока -
метод
forEach,
который выполняет действие для каждого элемента -
метод
forEachOrdered,
который обходит элементы в порядке следования