English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Java

Контроль потока Java

Массивы Java

Объектно-ориентированное программирование Java (I)

Объектно-ориентированное программирование Java (II)

Объектно-ориентированное программирование Java (III)

Обработка исключений Java

Списки Java (List)

Стек Java (Queue)

Словари Java

Множественные значения Java

Ввод-вывод (I/O) Java

Java Reader/Writer

Другие темы Java

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

Java новые возможности 9

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

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

Метод takeWhile

Синтаксис

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

Метод 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)

Метод позволяет использовать начальное значение начальной точки для создания упорядоченного (возможно, бесконечного) потока и применить指定的 следующий метод в цикле. Итерация останавливается, когда заданный 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

Метод 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