Java 9 Stream улучшения
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 9.
1. Введение
В Java 9 Stream API получил "апгрейд", его возможности немного расширились, тем самым, делая его еще более гибким и удобным инструментом.
2. takeWhile
Новый метод takeWhile(Predicate p) говорит сам за себя, он будет брать элементы стрима, до тех пор пока не встретится элемент, подходящий под предикат
1 2 3 |
Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .takeWhile(n -> n < 5) .forEach(System.out::println); // 1 2 3 4 |
2. dropWhile
Этот метод в отличии от takeWhile() будет удалять элементы из стрима, до тех пор, пока не найдется элемент, подходящий под предикат
1 2 3 |
Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .dropWhile(n -> n < 6) .forEach(System.out::println); // 6 7 8 9 10 |
3. iterate
Метод iterate(seed, unaryOperator) позволяет создать бесконечный стрим элементов, где первый аргумент - начальное значение, второй - генератор нового значения стрима
1 2 |
IntStream.iterate(0, n -> n + 1) .forEach(System.out::print); |
Таким образом можно создать стрим, где следующее значение будет равно значению предыдущего +1.
Если этот метод соединить с takeWhile(), то можно получить заданную последовательность чисел
1 2 3 |
IntStream.iterate(0, n -> n + 1) .takeWhile(n -> n < 10_000_000) .forEach(System.out::println); |
Метод iterate() перегружен, и имеет еще одну реализацию - iterate(seed, hasNextPrediate, UnaryOperator). Этот метод заменяет классический "for цикл".
1 2 |
IntStream.iterate(0, i -> i < 100_000, i -> i++) .forEach(System.out::println); |
4. ofNullable
Теперь стало возможным создавать Stream из null, тем самым, уходя от проверок на null и уменьшая вероятность NullPointerException. Рассмотрим пример до Java 9
1 2 3 4 5 6 |
users.stream() .flatMap(user -> { List<String> accounts = user.getAccounts(); return accounts == null ? Stream.empty() : accounts.stream(); }) .collect(Collectors.toList()); |
С Java 9 всё становится легче
1 2 3 |
users.stream() .flatMap(user -> Stream.ofNullable(user.getAccounts())) .collect(Collectors.toList()); |
На этом статья заканчивается, но не новинки Java 9. Спасибо, что были с нами 🙂
Хотите записаться к нам на курсы? Смотрите детальную информацию у нас на сайте.