私の目標は、マップのマップを作成して、外側のマップの情報をそのキーで取得し、その「内側の」マップにキーでアクセスできるようにすることです。
ただし、各内部マップを取得すると、作成したマップは元々オブジェクトになり、外部マップの場合のようにキーを使用してその値にアクセスすることはできません。
あなたの専門家から学ぶために、私はすべての地図を地図として保持する方法を知りたいです。または、それはまったく可能ですか?
これが私の運動プログラムです:
import Java.util.HashMap;
import Java.util.Iterator;
import Java.util.Map;
import Java.util.Set;
public class MapExample {
public static void main(String[] args) {
Map<Object,String> mp=new HashMap<Object, String>();
// adding or set elements in Map by put method key and value pair
mp.put(new Integer(2), "Two");
mp.put(new Integer(1), "One");
mp.put(new Integer(3), "Three");
mp.put(new Integer(4), "Four");
Map<Object,String> mp2=new HashMap<Object, String>();
mp2.put(new Integer(2), "Two2");
mp2.put(new Integer(1), "One2");
mp2.put(new Integer(3), "Three2");
mp2.put(new Integer(4), "Four2");
Map<Object,String> mpMaps=new HashMap();
mpMaps.put("Map1",mp);
mpMaps.put("Map2",mp2);
System.out.println("This is a map of Maps: " + mpMaps);
for (int i=0;i<mpMaps.size();i++){
ArrayList a = new ArrayList(mpMaps.keySet());
Object o=a.get(i);
System.out.println("all together: " + mpMaps.size() + "each element is: " + o + " value: " + mpMaps.get(o));
}
}
}
ソリューション:
Map<Object,Map<Object,String>
Map<String, Object> mpMaps=new HashMap<String, Object>();
ameerとsleskeによって
動作しているように見える更新されたコードは次のとおりです。mpは<String, Object>
で実行できない文字列ではないため、マップのマップを<Object, String>
として入力する必要があります。
import Java.util.HashMap;
import Java.util.Iterator;
import Java.util.Map;
import Java.util.Set;
import Java.util.ArrayList;
public class MapExample {
public static void main(String[] args) {
Map<Object,String> mp=new HashMap<Object, String>();
// adding or set elements in Map by put method key and value pair
mp.put(new Integer(2), "Two");
mp.put(new Integer(1), "One");
mp.put(new Integer(3), "Three");
mp.put(new Integer(4), "Four");
Map<Object,String> mp2=new HashMap<Object, String>();
mp2.put(new Integer(2), "Two2");
mp2.put(new Integer(1), "One2");
mp2.put(new Integer(3), "Three2");
mp2.put(new Integer(4), "Four2");
Map<String, Object> mpMaps=new HashMap<String, Object>();
mpMaps.put("Map1",mp);
mpMaps.put("Map2",mp2);
System.out.println("This is a map of Maps: " + mpMaps);
for (int i=0;i<mpMaps.size();i++){
ArrayList<Object> a = new ArrayList<Object>(mpMaps.keySet());
Object o=a.get(i);
System.out.println("all together: " + mpMaps.size() + "each element is: " + o + " value: " + mpMaps.get(o));
}
}
}
コードはコンパイルされません。
1つの問題はこれです:
Map<Object,String> mpMaps=new HashMap();
mpMaps.put("Map1",mp);
マップ(mp
)を値がStrings
である必要があるマップに配置するため、これは機能しません。
使用する Map<Object,Map<Object,String>
そしてあなたは大丈夫なはずです。
別の解決策は、マップのマップを回避するためにCommonsMultiKeyを使用することです。詳細については、 http://commons.Apache.org/collections/apidocs/ およびorg.Apache.commons.collections.keyvalue.MultiKeyを参照してください。
Map<Object,String> mpMaps=new HashMap();
mpMaps.put("Map1",mp);
このステートメントでは例外が発生します。mpの型はMapですが、文字列として扱っています。
私があなたの質問を正しく理解した場合、キーとして使用されるオブジェクトへの参照が必要になるか、キー/値を型キャストする必要があります。
HashMap
を使用した簡単な例を次に示します。
HashMap<String, HashMap<String, Object>> outerMap = new HashMap<String, HashMap<String, Object>>();
HashMap<String, Object> innerMap1 = new HashMap<String, Object>();
HashMap<String, Object> innerMap2 = new HashMap<String, Object>();
innerMap1.put("Name", "az");
innerMap1.put("Address", "7 lab");
innerMap1.put("Age", 40);
innerMap2.put("Name", "sab");
innerMap2.put("Address", "bk3");
innerMap2.put("Age", 35);
outerMap.put("1",innerMap1);
outerMap.put("2", innerMap2);
System.out.println("outerMap = " + outerMap);
出力:
outerMap = {1={Address=7 lab, Age=40, Name=az}, 2={Address=bk3, Age=35, Name=sab}}