web-dev-qa-db-ja.com

MapsのHashMapのImmutableMap.of()回避策

Immutable.of(Key, value)およびそのオーバーロードのようなImmutableMapを作成するユーティリティメソッドがあります。

しかし、そのようなメソッドは、HashMapクラスのLinkedHashMapまたはMapsには存在しません。

これを行うより良い方法はありますか、グアバはそのようなマップが常に一定のマップであり、ImmutableMapが最適なオプションであり、HashMap

27
Premraj

通常の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();
_
17
Jesper

Maps.newHashMap(ImmutableMap.of(...))を試してください

Maps.newHashMap(Map map)

15
user638455

違いは、不変マップの場合、構築後に変更できないため、すべてを事前に提供するためにhaveを使用することです。変更可能なマップの場合、マップを作成してからエントリを追加するだけです。確かに、これは単一の式でマップを作成するのを少し難しくしますが、それはtendとは言えません。

7
Jon Skeet

copyOfImmutableMapメソッドは使用できません here

それは次のようなものでなければなりません

Map newImmutableMap = ImmutableMap.copyOf(yourMap);
2
danny

ImmutableMap.of()は、ハッシュベースの順序なしの不変マップを返します。

順序付けされた不変のマップが必要な場合、ImmutableSortedMap.of()が選択肢です。

ImmutableSortedMapは、firstKey()lastKey()headMap(K)、_tailMap(K)などのメソッドを提供します。

両方のクラスはcopyOf(Map)メソッドを提供します。