web-dev-qa-db-ja.com

マップのマップ-内部マップをマップとして保持する方法は?

私の目標は、マップのマップを作成して、外側のマップの情報をそのキーで取得し、その「内側の」マップにキーでアクセスできるようにすることです。

ただし、各内部マップを取得すると、作成したマップは元々オブジェクトになり、外部マップの場合のようにキーを使用してその値にアクセスすることはできません。

あなたの専門家から学ぶために、私はすべての地図を地図として保持する方法を知りたいです。または、それはまったく可能ですか?

これが私の運動プログラムです:

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によって

5
john

動作しているように見える更新されたコードは次のとおりです。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));
        }             
    }
}
8
ameer

コードはコンパイルされません。

1つの問題はこれです:

Map<Object,String> mpMaps=new HashMap();
mpMaps.put("Map1",mp);

マップ(mp)を値がStringsである必要があるマップに配置するため、これは機能しません。

使用する Map<Object,Map<Object,String>そしてあなたは大丈夫なはずです。

5
sleske

別の解決策は、マップのマップを回避するためにCommonsMultiKeyを使用することです。詳細については、 http://commons.Apache.org/collections/apidocs/ およびorg.Apache.commons.collections.keyvalue.MultiKeyを参照してください。

3
Zahid
Map<Object,String> mpMaps=new HashMap();

mpMaps.put("Map1",mp);

このステートメントでは例外が発生します。mpの型はMapですが、文字列として扱っています。

私があなたの質問を正しく理解した場合、キーとして使用されるオブジェクトへの参照が必要になるか、キー/値を型キャストする必要があります。

0
user500074

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}}
0
AzizSM