Метод tryAdvance
Метод tryAdvance класса Spliterator применяет
заданное действие к следующему элементу последовательности
и возвращает true, если элемент существовал и был
обработан, или false, если элементов больше нет.
В параметр метода мы передаем объект Consumer -
функциональный интерфейс, содержащий единственный метод
accept, который принимает очередной элемент и
выполняет над ним нужные действия. Метод изменяет
внутреннее состояние сплитератора, сдвигая его к
следующему элементу.
Синтаксис
boolean tryAdvance(Consumer<? super T> action)
Пример
Давайте получим сплитератор списка и поочередно
обработаем его элементы с помощью tryAdvance:
import java.util.List;
import java.util.Spliterator;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
Spliterator<String> spliterator = list.spliterator();
while (spliterator.tryAdvance(System.out::println));
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример
Давайте проверим, что возвращает tryAdvance, когда
элементы закончились:
import java.util.List;
import java.util.Spliterator;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
Spliterator<Integer> spliterator = list.spliterator();
boolean res = spliterator.tryAdvance(System.out::println);
System.out.println(res);
spliterator.forEachRemaining(System.out::println);
res = spliterator.tryAdvance(System.out::println);
System.out.println(res);
}
}
Результат выполнения кода:
1
true
2
3
4
5
false
Пример
Давайте с помощью tryAdvance соберем только четные
элементы в новый список:
import java.util.ArrayList;
import java.util.List;
import java.util.Spliterator;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
Spliterator<Integer> spliterator = list.spliterator();
List<Integer> res = new ArrayList<>();
while (spliterator.tryAdvance(n -> {
if (n % 2 == 0)
{
res.add(n);
}
}));
System.out.println(res);
}
}
Результат выполнения кода:
[2, 4]
Смотрите также
-
класс
Spliterator,
который обходит элементы последовательности -
метод
trySplit,
который делит сплитератор на два -
метод
estimateSize,
который возвращает примерное число элементов -
метод
forEachRemaining,
который обрабатывает оставшиеся элементы