28 апреля 2018
Тэги: Collections, Java.
В Java 8 базовый интерфейс Map расширился новыми полезными методами. На конкретных примерах я покажу, как приходилось работать с этим типом коллекций раньше, и как легко с ним стало работать теперь.
Для того чтобы пройтись по всем элементам коллекции и вывести значения на экран, раньше мы бы писали такой код:
В java 8 появился метод foreach(), который принимает лямбда-функцию из двух параметров: ключ и значение. Указанный выше код можно записать одной строкой:
Если в объекте типа Map нет значения по указанному ключу, то мы получим null. Если потом с объектом предполагается выполнить какие-то действия, то мы рискуем получить NullPointerException. Чтобы обезопасить себя от исключения, раньше мы бы писали так:
Теперь у нас есть метод getOrDefault(), позволяющий задать значение по умолчанию:
Используя метод put(), мы можем добавлять новые элементы. Если же по данному ключу элемент уже был, то повторный вызов заменит это значение. Если же мы хотим предварительно проверить, нет ли уже такого элемента, то раньше мы бы писали такой код:
Теперь есть специальный метод putIfAbsent(), делающий ровно то же самое:
Часто в качестве значения Map лежит какой-нибудь список. И чтобы добавить в этот список новый элемент по указанному ключу, нам нужно предварительно убедиться, что список инициализирован. Раньше мы бы писали так:
Теперь используем лямбда-функцию в методе computeIfAbsent(), которая вызывается только в том случае, если ключа ещё нет в нашей мапе:
Бывает и такое, что в Map в качестве значений лежат некие числовые показатели, например, счётчики. И при возникновении нового значения, мы не должны потерять старое значение, если оно есть. Мы должны просуммировать его с новым:
Благодаря методу merge() весь указанный выше код может быть переписан с использованием лямбды:
Как видим, в Java 8 появился ряд новых удобных методов по работе с Map, которые позволяют выполнять рутинные операции буквально в одну строчку, используя лямбда-выражения.
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.