0

変数がありMap<String, Map<String, Double>>ます。
例として:

{user0, {Item1, 2.5, Item2, 3.5}}  
{user1, {Item1, 3.0, Item2, 2.0}}

次の出力を取得したいと思います。

{Item1, {user0, 2.5, user1, 3.0}}  
{Item2, {user0, 3.5, user2, 2.0}}

私はそれを行うために次のコードを書きました:

for(Map.Entry<String, Map<String, Double>> entry : usersMap.entrySet()){
    for(Map.Entry<String, Double> ent : entry.getValue().entrySet()){
        people.put(entry.getKey(), ent.getValue());
        transform.put(ent.getKey(), people);
    }
}

しかし、私は次のことを取ります:

{Item1, {user0, 3.0, user1, 2.0}}  
{Item2, {user0, 3.0, user2, 2.0}}

ここで助けてくれませんか。

4

3 に答える 3

4

アイテムごとに新しいマップを作成する必要があります

for(Map.Entry<String, Map<String, Double>> entry : usersMap.entrySet()){
    for(Map.Entry<String, Double> ent : entry.getValue().entrySet()){
        Map<String, Double> people = transform.get(ent.getKey());
        if (people == null) {
            people = new HashMap<>();
            transform.put(ent.getKey(), people);
        }
        people.put(entry.getKey(), ent.getValue());
    }
}

それ以外の場合、のすべての値にtransformはまったく同じマップが含まれます。

また、変数名を再考することもできます。例:

entry     --> userItemValues
ent       --> itemValue
people    --> userValues
transform --> itemsMap

真剣に、名前がわかりにくいため、コードを正しく取得するのに数回の試行が必要でした。しかし、今は正しいはずです

于 2013-02-04T10:21:27.753 に答える
0

試すtransform.get(ent.getKey()).put(entry.getKey(), ent.getValue())

あなたNullPointerExceptionも処理する必要があります。

于 2013-02-04T10:20:27.800 に答える
0

ピープルマップに1つの値しか追加していないようです。これを試して:

for(Map.Entry<String, Map<String, Double>> entry : usersMap.entrySet()){
    for(Map.Entry<String, Double> ent : entry.getValue().entrySet()){
        people.put(entry.getKey(), ent.getValue());
    }
    transform.put(ent.getKey(), people);
}
于 2013-02-04T10:20:34.493 に答える