Java 9: улучшенный Stream API

Java 9 新特性Новые возможности Java 9

В Java 9 улучшенный Stream API добавил несколько удобных методов, упрощающих обработку потоков, и возможность использовать коллекторы для написания сложных запросов.

В Java 9 добавлено несколько методов в Stream: dropWhile, takeWhile, ofNullable, а также добавлен перегруженный метод для iterate.

Метод takeWhile

Синтаксис

default Stream<T> takeWhile(Predicate<? super T> predicate)

Метод takeWhile() принимает предикат в качестве аргумента и возвращает подмножество заданного Stream до тех пор, пока условие предиката впервые не вернёт false. Если первое значение не удовлетворяет условию предиката, будет возвращён пустой Stream.

В упорядоченном Stream метод takeWhile возвращает как можно больше элементов с начала; в неупорядоченном Stream метод takeWhile возвращает подмножество элементов с начала, удовлетворяющих требованиям Predicate.

Пример

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 останавливает вывод цикла, когда встречает пустую строку, и вывод выполнения:

abc

метод dropWhile

Синтаксис

default Stream<T> dropWhile(Predicate<? super T> predicate)

Метод dropWhile является противоположностью takeWhile. Он принимает предикат в качестве аргумента и возвращает подмножество заданного Stream только до тех пор, пока выражение предиката впервые не вернёт false.

Пример

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); } }

В приведённом выше примере метод dropWhile начинает вывод цикла, когда встречает пустую строку, и результат выполнения:

ef

метод iterate

Синтаксис

static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)

Метод позволяет создавать последовательный (возможно, бесконечный) поток, используя начальное значение seed, и итеративно применять указанный метод next. Когда указанный предикат hasNext возвращает false, итерация останавливается.

Пример

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 может предотвращать NullPointerExceptions и избегать значений null путём проверки потока.

Если указанный элемент не null, метод получает элемент и создаёт поток из одного элемента; если элемент null, возвращается пустой поток.

Пример

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 9 新特性Новые возможности Java 9

Другие расширения