2017-12-20 7 views
0

私はCommons-collectionsのMultiValuedMapを使用しています。私は空のリストで地図にエントリを追加しようとしています。MultiValuedMapで空のマッピングを追加します

あなたがput("string", new ArrayList<String>())

私はMultiValuedMapでこれを行うことができますでしょうMap<String, List<String>>を持っているかどう枚

Iが試み:

map.asMap().put(stringValue, new ArrayList<>()) 

また:

map.put(stringValue, null) 

を最初の行は(UnsupportedOperation)例外をスロー2つ目は、私はないれ、リスト内のnull値を有します欲しいです。

+2

なぜこれが必要ですか? MultiValuedMapは値リストを暗黙的に作成するので、通常、リストが存在するかどうかの実装の詳細とみなされます。 –

+1

Apache Commonsの機能の多くはJava 8に取って代わられました。単純なJava APIメソッド['Map.computeIfAbsent'](https://docs.oracle.com/javase/8/docs/api/)を使用することができます。 java/util/Map.html#computeIfAbsent-K-java.util.function.Function-)を使用する代わりに、MultiValuedMapを使用します。あなたに外部の依存関係を保存します。 –

答えて

2

getメソッドは、値がない場合は空のリストを返します。したがって、内部リストを初期化する必要はありません。存在しないキーと空のコレクションにマップされたキーを区別しなければならない場合は、contains(key)のようなメソッドのセマンティクスが混乱する可能性があります。

このような動作は実装固有のものであり、ライブラリのバージョンによって異なる場合があります。しかし、implementationを見ても、とにかく空の内部リストを持つことはできないようです。内部リストは、少なくとも1つの要素が実際に含まれている場合にのみ初期化され、すべての要素が削除されると削除されます。

関連する問題