Java 9 — улучшения потокового API
Потоки были введены в 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
нуль
Синтаксис
static <T> Stream<T> ofNullable(T t)
Метод ofNullable введен для предотвращения исключений NullPointerException и во избежание нулевых проверок для потоков. Этот метод возвращает последовательный поток, содержащий один элемент, если он не равен нулю, в противном случае возвращает пустой поток.
Пример
import java.util.stream.Stream; public class Tester { public static void main(String[] args) { long count = Stream.ofNullable(100).count(); System.out.println(count); count = Stream.ofNullable(null).count(); System.out.println(count); } }
Вывод
1 0
java