Руководство по Java 9. Улучшения в Stream API.

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

Мы рассмотрим следующие методы:

  • iterate
  • dropWhile
  • takeWhile
  • ofNullable

Начнём обзор с метода iterate

Синтаксис данного метода следующий:


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

Рассмотрим простой пример:


package net.proselyte.java9.streams;

import java.util.stream.IntStream;

public class StreamIterateMethodDemo {
    public static void main(String[] args) {
        IntStream.iterate(0, i -> i < 20, i -> i + 5).forEach(System.out::println);
    }
}

dropWhile

Данный метод имеет следующий синтаксис:


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

Cуть данного метода заключается в том, что он отбрасывает все элементы до тех пор, пока предикат не вернёт true.

Для более полного понимания рассмотрим следующий пример:


package net.proselyte.java9.streams;

import java.util.stream.Stream;

public class StreamDropWhileMethodDemo {
    public static void main(String[] args) {
        Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                .dropWhile(element -> element < 6)
                .forEach(System.out::println);
    }
}

В результате выполнения данной программы мы получим следующий результат:


6
7
8
9
10

Process finished with exit code 0

Как мы можем видеть, действия выполнялись только для тех элементов, для которых предикат возвратил false, а те, для которых было возвращено true – были “отброшены”.

takeWhile

Данный метод имеет логику, противоположную dropWhile. Его задача – работать с элементами, для которые условие истинно.

Метод имеет следующий синтаксис:


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

Рассмотрим следующий пример:


package net.proselyte.java9.streams;

import java.util.stream.Stream;

public class StreamTakeWhileMethodDemo {
    public static void main(String[] args) {
        Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                .takeWhile(element -> element < 6)
                .forEach(System.out::println);
    }
}

Результатом выполнения данной программы будет:


1
2
3
4
5

Process finished with exit code 0

ofNullable

Данный метод имеет следующий синтаксис:


static  Stream ofNullable(T t)

Данный метод разработан для избежания лишних проверок на null и для предотвращения NullPOinterException.
Рассмотрим небольшой пример:


package net.proselyte.java9.streams;

import java.util.stream.Stream;

public class StreamOfNullableMethodDemo {
    public static void main(String[] args) {
        long checker = Stream.ofNullable("String").count();
        System.out.println(checker);

        checker = Stream.ofNullable(null).count();
        System.out.println(checker);
    }
}

Результат выполнения данной программы следующий:


1
0

Process finished with exit code 0

На этом мы заканчиваем изучение улучшений в Stream API, сделанных в Java 9.

В следующей статье мы рассмотрим улучшения, касающиеся Process API.