0

以下を使用してDBからデータを取得し、リストに保存しました。

List<MyObject> list =new ArrayList<MyObject>();

リストには 2 つの MyObject クラスのオブジェクトが含まれています。

私は2つの Map 実装を持っています:

Map<String,Map<String,Long>> map1 = new HashMap<String,Map<String,Long>>();
Map<String,Long> map2 = new HashMap<String,Long>();

リストを繰り返し、次のコードを実行しました

for(myObjectObj   :   list){

      map2.put(myObjectObj.getAction(),myObjectObj.getCount());
      map1.put(myObjectObj.getName(),map2);
}

私が欲しかった最終的な出力は、次のようにmap1でした:

Name1 action1 count1
      action2 count2
Name2 action3 count3
      action4 count4

しかし、私のコードでは、目的の出力が得られません。

4

1 に答える 1

2

現在のバージョンでは、map2 参照はすべての map1 インスタンスに共通であるため、map2 インスタンスに追加するデータは実際には map1 のすべてのエントリに追加されます。

リスト内のすべてのエントリに対して新しいネストされたマップが必要な場合、ループ内で新しい map2 を取得またはインスタンス化する必要があります。

for(myObjectObj   :   list){ 
      String key = myObjectObj.getName();
      Map<String,Long> map2 = map1.get(key);
      if (map2 == null) {
          map2 = new HashMap<String,Long>();
          map1.put(key, map2);
      }
      map2.put(myObjectObj.getAction(),myObjectObj.getCount());
}
于 2012-07-20T10:19:41.693 に答える