Существуют утилиты для создания 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)
.