В данной статье мы рассмотрим, какие улучшения, касающиеся 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.