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 回答