18

値として空のコレクションを使用して、Guavaマルチマップにキーを追加する必要があります。どうすればこれを達成できますか?

私はこれを試しました:

map.put( "my key", null );

ただし、get()を呼び出すと、nullである1つの要素を持つリストが返されます。私は次のことを行うことでこれを回避しました:

map.putAll("my key2", new ArrayList())

しかし、これは悪いことではないかと思いますか?containsKey()の一貫性を保つために、最後の値が削除されると、Guavaが自動的にキーを削除することを知っています。ここでの私の最善の選択肢は何ですか?

4

2 に答える 2

26

Multimap このアプローチを意図的に禁止しており、提案された回避策は何もしません。実際には何もしません。

Multimap動作する方法は、 multimap.get(key)nullを返すことはありませんが、常に何らかのコレクション(おそらく空)を返すことです。(ただし、バッキングMultimap実装は実際にはそのキーに対して何も格納しない可能性があり、キーがでないコレクションにマップされていない場合、たとえば、。is notに表示さませkeySet()。 )MultimapMap<K, Collection<V>>

空のコレクションにマップする場合は、を使用する必要がありますMap<K, List<V>>

于 2012-07-20T23:24:46.807 に答える
8

javadocで説明されているように、マルチマップは概念的にはキーと値のペアの集まりであり、キーは必ずしも一意ではありません。たとえば、a = 1、a = 2、b=3です。aに関連付けられた値がない場合、aのキーと値のペアがないため、aはマルチマップに存在しません。

実行できることの1つはSet<K>、関心のあるキーのユニバース全体を個別に保持するか、値に対応しない追加のキーを保持することです。もう1つは、、、Map<K, Collection<V>>またはMap<K, Something>whereSomethingに、空である場合とされていない場合があるコレクションが含まれている場合を使用することです。

于 2012-07-21T00:35:15.543 に答える