11 ноября 2017 г.

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

Актуальная версия статьи на моём сайте devmark.ru

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.

Комментариев нет:

Отправить комментарий