Потоки были введены в Java, чтобы помочь разработчикам выполнять агрегатные операции из последовательности объектов. В Java 9 добавлено еще несколько методов для улучшения потоков.
takeWhile (интерфейс предиката)
Синтаксис
default Stream<T> takeWhile(Predicate<? super T> predicate)
Метод takeWhile принимает все значения, пока предикат не вернет false. В случае упорядоченного потока он возвращает поток, состоящий из самого длинного префикса элементов, взятых из этого потока, соответствующих данному предикату.
пример
import java.util.stream.Stream; public class Tester { public static void main(String[] args) { Stream.of("a","b","c","","e","f").takeWhile(s->!s.isEmpty()) .forEach(System.out::print); } }
Выход
Метод takeWhile принимает все значения a, b и c, затем, когда строка пуста, выполнение прекращается.
abc
dropWhile (интерфейс предиката)
Синтаксис
default Stream<T> dropWhile(Predicate<? super T> predicate)
Метод dropWhile отбрасывает все значения в начале, пока предикат не вернет true. В случае упорядоченного потока он возвращает поток, состоящий из оставшихся элементов этого потока, после удаления самого длинного префикса элементов, соответствующих данному предикату.
пример
import java.util.stream.Stream; public class Tester { public static void main(String[] args) { Stream.of("a","b","c","","e","f").dropWhile(s-> !s.isEmpty()) .forEach(System.out::print); System.out.println(); Stream.of("a","b","c","","e","","f").dropWhile(s-> !s.isEmpty()) .forEach(System.out::print); } }
Выход
Метод dropWhile сбрасывает значения a, b и c, затем, когда строка пуста, она принимает все значения.
ef ef
повторять
Синтаксис
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
Метод iterate теперь имеет предикат hasNext в качестве параметра, который останавливает цикл, когда предикат hasNext возвращает false.
пример
import java.util.stream.IntStream; public class Tester { public static void main(String[] args) { IntStream.iterate(3, x -> x < 10, x -> x+ 3).forEach(System.out::println); } }
Выход
3 6 9
ofNullable
Синтаксис
static <T> Stream<T> ofNullable(T t)
Метод ofNullable введен, чтобы предотвратить исключения NullPointerException и избежать нулевых проверок для потоков. Этот метод возвращает последовательный поток, содержащий один элемент, если он не равен нулю, в противном случае возвращает пустой поток.