English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Улучшенный Stream API Java 9 добавил несколько удобных методов, которые делают обработку потоков проще, и позволяет использовать коллекторы для написания сложных запросов.
Java 9 добавил несколько новых методов для Stream: dropWhile, takeWhile, ofNullable, а также добавил перегруженный метод для iterate.
Синтаксис
default Stream<T> takeWhile(Predicate<? super T> predicate)
Метод takeWhile() использует утверждение в качестве параметра и возвращает подмножество Stream до тех пор, пока утверждение не вернет false в первый раз. Если первый элемент не удовлетворяет условию predicate, возвращается пустой Stream.
Метод takeWhile() в упорядоченном Stream возвращает как можно больше элементов от начала; в неупорядоченном Stream takeWhile() возвращает подмножество Stream, начиная с начала, которое удовлетворяет predicate. Если первый элемент не удовлетворяет условию predicate, возвращается пустой Stream.
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
Синтаксис
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
Синтаксис
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
Метод позволяет использовать начальное значение начальной точки для создания упорядоченного (возможно, бесконечного) потока и применить指定的 следующий метод в цикле. Итерация останавливается, когда заданный predicate 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
Синтаксис
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