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, H2, Linux, Hibernate, Collections, Stream API, многопоточность, чат-боты, нейросети, файлы, devops, Docker, 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 Максим
Реально качественные статьи. Благодарю!