Существуют утилиты для создания ImmutableMap как Immutable.of(Key, value) и его перегрузки.
Но таких методов не существует для HashMap или LinkedHashMap в классе Maps.
Есть ли лучший способ сделать это, или Guava предполагает, что такая карта всегда является постоянной картой, а ImmutableMap лучше всего подходит и не нужно предоставлять утилиту для HashMap.
Обходной метод ImmutableMap.of() для HashMap в Картах?
Ответ 1
Зачем вам нужны те, у которых есть регулярные HashMap или LinkedHashMap? Вы можете просто сделать это:
Map<String, Object> map = Maps.newHashMap();
map.put(key, value);
Вещь с ImmutableMap заключается в том, что ее создание немного сложнее; вам сначала нужно сделать Builder, затем поместить пары ключ-значение в построитель, а затем вызвать build() на нем, чтобы создать ImmutableMap. Метод ImmutableMap.of() делает его более коротким для записи, если вы хотите создать ImmutableMap с одной парой ключ-значение.
Подумайте, что вам нужно написать, если вы не будете использовать метод ImmutableMap.of():
ImmutableMap<String, Object> map = ImmutableMap.builder()
.put(key, value);
.build();
Ответ 2
Попробуйте Maps.newHashMap(ImmutableMap.of(...))
Ответ 3
Разница в том, что для неизменяемой карты вам нужно обеспечить все, что бы вы не могли изменить после строительства. Для измененных карт вы можете просто создать карту, а затем добавить записи. По общему признанию, это делает немного сложнее создать карту в одном выражении, но это, как правило, не является проблемой, когда вы захотите изменить карту в любом случае, по моему опыту.
Ответ 4
ImmutableMap.of() возвращает неизменяемую карту хеша без указания порядка.
Если вам нужна упорядоченная неизменяемая карта, ImmutableSortedMap.of() - это выбор.
ImmutableSortedMap предоставляет такие методы, как firstKey(), lastKey(), headMap(K) и tailMap(K);
Оба класса предоставляют метод copyOf(Map).