Map в том, что в отличие от других коллекций инициализация должна принять параметрами набор пар неопределенного размера. Поэтому varargs здесь не подходит.Самый примитивный, многословный, но простой способ – добавить элементы сразу после создания. Для мапы-поля класса это можно сделать в конструкторе или блоке инициализации.
Map<String, String> map = new HashMap<>();
{
map.put("one", "first");
map.put("two", "second");
}
Идиома double brace initialization. Компактная запись, которая расшифровывается компилятором как создание анонимного класса-наследника от
HashMap, с добавлением элементов в блоке статической инициализации. Создание нового класса приводит к дополнительным накладным расходам, так делать не рекомендуется.
new HashMap<String, String>() {{
put("one", "first");
put("two", "second");
}};
Для специальных случаев, пустой и одноэлементной неизменяемых мап, в классе
Collections есть соответствующие фабричные методы emptyMap() и singletonMap(key, value).Удобно создавать
HashMap из стрима. Коллектор Collectors.toMap(keyMapper, valueMapper) с помощью мапперов превратит объекты потока в ключи и значения.В Java 9 наконец появились фабричные метод
Map.of(), перегруженный для разного количества пар параметров, и Map.ofEntries() с varargs-аргументом.До Java 9 подобное было реализовано во многих популярных библиотеках, например
ImmutableMap.of в Guava и MapUtils.putAll() в Apache Commons.