Java 9 Stream API Enhancements: takeWhile, dropWhile, iterate, ofNullable
Streams в Java 8 позволяли декларативно обрабатывать последовательности. Java 9 добавила полезные методы.
takeWhile(Predicate)
Берёт элементы, пока предикат возвращает true. Для упорядоченных стримов — самый длинный префикс, удовлетворяющий предикату.
default Stream<T> takeWhile(Predicate<? super T> predicate)
Пример
Stream.of("a","b","c","","e","f").takeWhile(s -> !s.isEmpty())
.forEach(System.out::print); // вывод: abc
dropWhile(Predicate)
Пропускает элементы в начале, пока предикат true. Возвращает остаток после самого длинного префикса, удовлетворяющего предикату.
default Stream<T> dropWhile(Predicate<? super T> predicate)
Пример
Stream.of("a","b","c","","e","f").dropWhile(s -> !s.isEmpty())
.forEach(System.out::print); // вывод: ef
Stream.of("a","b","c","","e","","f").dropWhile(s -> !s.isEmpty())
.forEach(System.out::print); // вывод: ef
iterate с предикатом (hasNext)
Новая перегрузка iterate(seed, hasNext, next) останавливается, когда hasNext возвращает false.
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
Пример
IntStream.iterate(3, x -> x < 10, x -> x + 3).forEach(System.out::println);
// 3, 6, 9
ofNullable
Создаёт стрим с одним элементом, если значение не null, иначе пустой стрим. Избегает NPE и явных null-check.
static <T> Stream<T> ofNullable(T t)
Пример
Stream.ofNullable(100).count(); // 1
Stream.ofNullable(null).count(); // 0
Эти методы делают Stream API более выразительным и безопасным.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
- Java 9 (JDK 9): ключевые возможности и преимущества