В данном случае инициализатор экземпляра - это просто синтаксический сахар, верно? Я не понимаю, зачем вам нужен дополнительный анонимный класс только для инициализации. И это не сработает, если создаваемый класс является окончательным.
Вы также можете создать неизменяемую карту, используя статический инициализатор:
Как вы можете видеть, она очень лаконична (из-за удобных заводских методов в ImmutableMap).
Если вы хотите, чтобы на карте было более 5 записей, вы больше не можете использовать ImmutableMap.of(). Вместо этого попробуйте ImmutableMap.builder() в следующих строках:
Раньше Guava (подмножество) называлась Google Collections. Если вы еще не используете эту библиотеку в своем Java-проекте, я настоятельно рекомендую попробовать ее! Guava быстро стала одной из самых популярных и полезных бесплатных сторонних библиотек для Java, с чем согласны другие пользователи SO. (Если вы новичок в этом, по этой ссылке есть несколько отличных учебных ресурсов.)
Обновление (2015): Что касается Java 8, я бы все равно использовал подход Guava, потому что он намного чище всего остального. Если вам не нужна зависимость от Guava, рассмотрите простой старый метод инициализации. Взлом с двумерным массивом и потоковым API довольно уродлив, если вы спросите меня, и становится еще уродливее, если вам нужно создать карту, ключи и значения которой не одного типа (как Map<Integer, String> в вопросе).