Статьи
Утилиты 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.



Комментарии

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

×

devmark.ru