Актуальная версия статьи на моём сайте devmark.ru
Java 9 предоставляет новый способ создания read-only коллекций при помощи стандартных универсальных методов List.of(), Set.of() и Map.of().
Например, если мы хотим создать список строк, представляющих собой дни недели, то он будет выглядеть так:
При этом при попытке модифицировать полученную коллекцию (например, добавить новый элемент) вы получите ошибку, т.к. в данном случае вы работаете с неизменямой коллекцией.
Теперь рассмотрим работы с мапой. Метод Map.of() принимает чётное количество элементов, где каждый нечётный - это ключ коллекции, а каждый чётный - значение. Для предыдущего примера вариант с мапой будет выглядеть так:
Данная коллекция опять-таки является неизменяемой. Но есть и ещё один нюанс. Здесь вы можете объявить не более 10 элементов мапы. Если вы захотите объявить 11 и более элементов, компилятор выдаст ошибку.
Предположим, вы хотите создать коллекцию из названий месяцев вместе с их порядковыми номерами. Тут нам на помощь придёт метод Map.ofEntries(). И каждый элемент придётся обернуть в другой статический метод Map.entry().
В случае с методоми Set.of() и List.of() такой проблемы нет, так как там нет ключей.
Кстати, метод Map.entry() также является неплохой альтернативой для создания любой пары значений, ведь в Java нет стандартного класса Pair.
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.