0

私はJavaが初めてで、まだ学習段階にあります。私は構造を持っています

Map<Long, Map<String, Data>> mapData

Dataには 2 つのフィールドがtimeありdistance 、 にはフィールドMapである時間があり、 構造は次のようになりますLongmapIdentifierData

{190001919 = {[1= [data1], 2=[data2], 3=[data3]}, 
190001920={[1=[data4], 2=[data5], 3=[data6]}, 
1900019121= {[1=[data7], 2=[data8], 3=[data9]}}

次に、それをマップに変換します-識別子が同じであるasとasの値を使用Map<String,List<Data>> mpDataidenifierますkeyvalues

お気に入り

{1= [data1,data4,data7], 2= [data2,data5,data8],3= [data3,data6,data9]}

誰か助けてくれませんか?更新:以下のコードで、私は得る

{1= [data7,data7,data7], 2= [data8,data8,data8],3= [data9,data9,data9]}

それ以外の

 {1= [data1,data4,data7], 2= [data2,data5,data8],3= [data3,data6,data9]}

コード:

public static Map<Long, Map<String, Data>> listData;
public static Map<String, List<Data>> mapData;
public convertMapData(Map<Long, Map<String, Data>> array) {
        listData = new HashMap();
        listData = array;
        mapData = new HashMap<>();
        Iterator it = listData.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Long, Map<String, Data>> pairs = (Map.Entry) it
                    .next();
            Long keyValue = pairs.getKey();
            Map inter = pairs.getValue();

            Iterator it2 = inter.entrySet().iterator();
            while (it2.hasNext()) {
                Map.Entry<String, Data> pairs_2 = (Map.Entry) it2
                        .next();
                String identifierK = pairs_2.getKey();
                Data resultV = pairs_2.getValue();
                if (!(mapData.containsKey(identifierK))) {
                    mapData.put(identifierK, new ArrayList<Data>());
                }
                mapData.get(identifierK).add(resultV);      
            }
        }

}
4

1 に答える 1

2
  1. 定義Map<String,List<Data>> listData = new HashMap<String, List<Data>>();
  2. の値を反復処理しmapDataます (そのマップのキーを使用していないようです)。
  3. これもマップであるのすべての値についてmapData、 を反復処理します。これにより、すべてのエントリのentrySetキー (a String、それを呼び出しますK) と値 (データ オブジェクト、それを呼び出します) が得られます。V
  4. (を使用して)listDataのようなキーが既にあるかどうかを確認し、そうでない場合は、を使用して追加しますKcontainsKey()listData.put(K, new ArrayList<Data>())
  5. Vキー用に保存されているリストに追加します。listData.get(K).add(V)

それで全部です。Rohit Jain がコメントしたように、listData マップの周りにリストは必要ありません。

これを試して:

public Map<String, List<Data>> convert(Map<Long, Map<String, Data>> array) {
    Map<String, List<Data>> result = new HashMap<String, List<Data>>();
    for (Map<String, Data> inter : array.values()) {
        for (Map.Entry<String, Data> entry : inter.entrySet()) {
            String k = entry.getKey();
            String v = entry.getValue();
            if (!result.containsKey(k)) {
                result.put(k, new ArrayList<Data>());
            }
            result.get(k).add(v);      
        }
    }
    return result;
}
于 2013-09-23T08:42:28.090 に答える