8 апреля 2019
Тэги: Collections, Java, Stream API.
Ранее мы уже рассмотрели Промежуточные операции Stream API, а сейчас рассмотрим терминальные (конечные).
Промежуточные операции следует воспринимать как «отложенные», т.е. они не меняют сами данные, а только задают правила их изменения. А терминальные как раз инициируют всю цепочку преобразований, закрывают поток и возвращают модифицированные данные. Закрытый поток повторно использовать нельзя.
Самая распространённая терминальная операция collect(). Результатом может быть, например, список.
А можно преобразовать стрим из строк в мапу, причём ключом сделать первую букву соответствующего слова:
Простой обход элементов стрима можно выполнить с помощью метода forEach(). Его смысл полностью аналогичен языковой конструкции for.
Здесь мы просто выводим в консоль значение каждого элемента стрима.
Аналог метода size() в коллекциях и поля length в массивах. В стримах для этого используется метод count(). Обратите внимание, что метод возвращает не int, а long.
Как нетрудно догадаться, min() возвращает минимальное значение, а max() – максимальное. В качестве параметра они принимают класс Comparator.
Также обратите внимание, как мы обошли «одноразовость» потока. Чтобы не писать два раза конструкцию Stream.of(...), мы использовали утилитарный класс Supplier<>. Вызов метода get() у него в действительности каждый раз создаёт новый поток с одними и теми же значениями.
Метод findFirst() возвращает первый элемент стрима. Этот метод очень удобно использовать в паре с filter().
В данном случае мы вернём первое чётное число, т.е. 2.
Чтобы проверить все элементы стрима на соответствие некоторому условию, используйте метод allMatch(). Его результатом может быть только true или false.
В этом примере мы проверяем, что все элементы положительные.
Если нужно проверить, что ни один элемент не удовлетворяет условию, воспользуйтесь методом noneMatch(). Перепишем предыдущий пример так:
Чтобы проверить наличие хотя бы одного элемента, удовлетворяющего условию, используйте метод anyMatch().
Kotlin, Java, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.
08.03.2022 12:21 Alex
А как же метод reduce?
29.06.2024 18:03
Крутой сайт у вас
25.07.2024 19:13 Максим
Реально качественные статьи. Благодарю!