Гуава имеет, что с его ImmutableMap
:
final Map<Foo, Bar> map = ImmutableMap.of(foo1, bar1, foo2, bar2, etc, etc);
Bonus: Имя ImmutableMap
«s не ложь;)
Заметьте, что существует 5 версий метода .of()
, поэтому до 5 пар ключ/значение. Более общий способ состоит в использовании строитель:
final Map<Foo, Bar> map = ImmutableMap.<Foo, Bar>builder()
.put(foo1, bar1)
.put(foo2, bar2)
.put(foo3, bar3)
.put(etc, etc)
.build();
Заметим, однако: эта карта не принимает нулевые ключи или значения.
В качестве альтернативы, это версия бедного человека ImmutableMap
. Он использует классический шаблон построения. Обратите внимание, что не проверяет нулям:
public final class MapBuilder<K, V>
{
private final Map<K, V> map = new HashMap<K, V>();
public MapBuilder<K, V> put(final K key, final V value)
{
map.put(key, value);
return this;
}
public Map<K, V> build()
{
// Return a mutable copy, so that the builder can be reused
return new HashMap<K, V>(map);
}
public Map<K, V> immutable()
{
// Return a copy wrapped into Collections.unmodifiableMap()
return Collections.unmodifiableMap(build());
}
}
Затем вы можете использовать:
final Map<K, V> map = new MapBuilder<K, V>().put(...).put(...).immutable();
Гуава имеет что, см мой answer – fge
Если вы хотите только JDK-решение, вы можете написать простой класс для этого, но он будет очень ограниченным. – Djon
@ Djon действительно довольно легко реализовать строителя, см. Мой ответ – fge