Это будет делать то, что вы хотите:
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};
Этот оператор создает анонимный подкласс HashMap, где единственным отличием от родительского класса является то, что 4 записи добавляются во время создания экземпляра.Это довольно распространенная идиома в мире Java (хотя некоторые считают ее противоречивой, поскольку она создает новое определение класса).
Из-за этой противоречивости в Java 9 появилась новая идиома для удобного построения карт:семейство статических методов Map.of .
С Java 9 или выше вы можете создать нужную карту следующим образом:
Map<String, Integer> map = Map.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
Для больших карт это альтернативный синтаксис может быть менее подвержен ошибкам:
Map<String, Integer> map = Map.ofEntries(
Map.entry("cat", 2),
Map.entry("dog", 1),
Map.entry("llama", 0),
Map.entry("iguana", -1)
);
(Это особенно удобно, если Map.entry статически импортируется вместо явной ссылки).
Кроме толькоПри работе с Java 9+ эти новые подходы не совсем эквивалентны предыдущему:
- Они не позволяют указать, какая реализация Map используется
- Они создают только неизменяемыекарты
- Они не создают анонимный подкласс Map
Однако эти различия не должны иметь значения для многих случаев использования, что делает этот подход подходящим по умолчаниюh для более новых версий Java.