Метод dropWhile
Метод dropWhile класса Stream возвращает новый поток,
который отбрасывает элементы исходного потока до тех пор,
пока они удовлетворяют заданному условию (предикату).
Как только встречается первый элемент, не удовлетворяющий
условию, этот элемент и все последующие элементы включаются
в результирующий поток. В первый параметр мы передаем
предикат - функциональный интерфейс Predicate,
который принимает элемент потока и возвращает
true или false. Метод особенно полезен
для упорядоченных потоков, когда нужно пропустить
начальную часть элементов, соответствующую некоторому
условию.
Синтаксис
stream.dropWhile(predicate)
Пример
Давайте отбросим элементы потока до тех пор,
пока они меньше 3:
import java.util.List;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 1, 2);
List<Integer> res = stream.dropWhile(n -> n < 3).toList();
System.out.println(res);
}
}
Результат выполнения кода:
[3, 4, 5, 1, 2]
Пример
Давайте отбросим элементы потока до тех пор,
пока они начинаются с буквы "a":
import java.util.List;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<String> stream = Stream.of("abc", "ade", "bcd", "abc");
List<String> res = stream.dropWhile(s -> s.startsWith("a")).toList();
System.out.println(res);
}
}
Результат выполнения кода:
["bcd", "abc"]
Пример
Если первый элемент потока не удовлетворяет условию, метод ничего не отбрасывает:
import java.util.List;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = Stream.of(5, 1, 2, 3, 4);
List<Integer> res = stream.dropWhile(n -> n < 3).toList();
System.out.println(res);
}
}
Результат выполнения кода:
[5, 1, 2, 3, 4]