Статьи Утилиты Telegram YouTube Отзывы

Простой способ создания коллекций в Java 9

4 января 2018

Тэги: Collections, Java.

Java 9 предоставляет новый способ создания read-only коллекций при помощи стандартных универсальных методов List.of(), Set.of() и Map.of().

Например, если мы хотим создать список строк, представляющих собой дни недели, то он будет выглядеть так:

List<String> days = List.of(
        "понедельник",
        "вторник",
        "среда",
        "четверг",
        "пятница",
        "суббота",
        "воскресенье");

При этом при попытке модифицировать полученную коллекцию (например, добавить новый элемент) вы получите ошибку, т.к. в данном случае вы работаете с неизменямой коллекцией.

Теперь рассмотрим работы с мапой. Метод Map.of() принимает чётное количество элементов, где каждый нечётный – это ключ коллекции, а каждый чётный – значение. Для предыдущего примера вариант с мапой будет выглядеть так:

Map<Integer, String> days = Map.of(
        1, "понедельник",
        2, "вторник",
        3, "среда",
        4, "четверг",
        5, "пятница",
        6, "суббота",
        7, "воскресенье");

Данная коллекция опять-таки является неизменяемой. Но есть и ещё один нюанс. Здесь вы можете объявить не более 10 элементов мапы. Если вы захотите объявить 11 и более элементов, компилятор выдаст ошибку.

Предположим, вы хотите создать коллекцию из названий месяцев вместе с их порядковыми номерами. Тут нам на помощь придёт метод Map.ofEntries(). И каждый элемент придётся обернуть в другой статический метод Map.entry().

Map<Integer, String> months = Map.ofEntries(
        Map.entry(1, "январь"),
        Map.entry(2, "февраль"),
        Map.entry(3, "март"),
        Map.entry(4, "апрель"),
        Map.entry(5, "май"),
        Map.entry(6, "июнь"),
        Map.entry(7, "июль"),
        Map.entry(8, "август"),
        Map.entry(9, "сентябрь"),
        Map.entry(10, "октябрь"),
        Map.entry(11, "ноябрь"),
        Map.entry(12, "декабрь")
);

В случае с методоми Set.of() и List.of() такой проблемы нет, так как там нет ключей.

Кстати, метод Map.entry() также является неплохой альтернативой для создания любой пары значений, ведь в Java нет стандартного класса Pair.


Облако тэгов

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.

Последние статьи


Комментарии

Добавить комментарий

×

devmark.ru