Map のキーに関連付けられたすべての値を取得したいと考えています。たとえば、
Map tempMap = new HashMap();
tempMap.put("1","X");
tempMap.put("2","Y");
tempMap.put("3","Z");
tempMap.put("1","ABC");
tempMap.put("2","RR");
tempMap.put("1","RT");
キー 1 に関連付けられたすべての値を取得する方法は?
理解しなければならないことは、Map ではキーが一意であることです。
つまりその後
tempMap.put("1","X");
「1」は「X」にマッピングされます
以降
tempMap.put("1","ABC");
「1」は「ABC」にマッピングされ、前の値 (「X」) は失われます
HashMap javadoc から:
public V put(K key, V value)
指定された値をこのマップ内の指定されたキーに関連付けます。マップに以前にキーのマッピングが含まれていた場合、古い値は置き換えられます。
あなたができることはこれです:
Map<String, List<String>> tempMap = new HashMap<String, List<String>>();
tempMap.put("1", new LinkedList<String>());
tempMap.get("1").add("X");
tempMap.get("1").add("Y");
tempMap.get("1").add("Z");
for(String value : tempMap.get("1")) {
//do something
}
これにより、キー「1」に対応する値が独自のリストに区分化され、簡単にアクセスできるようになります。リストを初期化することを忘れないでください...そうしないと、NullPointerException
sがあなたを迎えに来ます。
ユヴァル=8-)
できない
google collectionsの Multimapを使ってみてください
重要な何かが欠けていると思います:
Map tempMap = new HashMap();
tempMap.put("1","X");
tempMap.put("2","Y");
tempMap.put("3","Z");
tempMap.put("1","ABC"); // replaces "X"
tempMap.put("2","RR"); // replaces "Y"
tempMap.put("1","RT"); // replaces "ABC"
また、可能な場合はジェネリックを使用する必要があるため、最初の行は次のようにする必要があります。
Map<String, String> tempMap = new HashMap<String, String>();
これを行うには、各キーを値のセットに関連付け、対応するロジックを使用してセットを作成し、マップで単純な put() および get() の代わりに値を入力/削除する必要があります。
または、Apache commons にあるような、既製の Multimap 実装の 1 つを使用することもできます。