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

Вернуться назад

4 января 2018

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.

Тэги: Collections, Java 9.