创建其他地图

时间:2019-05-09 13:35:09

标签: java

我有一个看起来像这样的地图:

Map<String, List<Integer>> map = new TreeMap<>();

可以说地图的内容如下:

one, [-55, -55, -54, -54, -55, -54, -54, -54, -54, -55]
two, [-61, -61, -61, -61, -60, -61, -60, -61, -60, -60]
three, [-69, -69, -68, -68, -68, -69, -70, -68, -69, -69]

我创建了一个名为“ addRandomValuesToList”的方法,该方法查看一个称为input的整数列表,将其取4个值并将其放入另一个名为randomValues的列表中。

public static List<Integer> addRandomValuesToList(List<Integer> input) 
{
    List<Integer> randomValues = new ArrayList<>();
    ...
    return randomValues 
}

我想在地图上的所有列表上使用addRandomValuesToList方法,例如:

one, [-54, -54, -54, -54]
two, [-61, -61, -61, -61,]
three, [-69 -69, -70, -68]

我很难做到这一点。我尝试过类似的事情:

Map<String, List<Integer>> test = new TreeMap<>();

for (Map.Entry<String, List<Integer>> entry : map.entrySet()) {
     newList = addRandomValuesToList(entry.getValue());
     test.put(entry.getKey(), newList);
}

这会导致测试图中的某些列表完全为空。我是在做错什么还是我的方法是错的?

1 个答案:

答案 0 :(得分:1)

应该将变量声明为局部变量。 (它只会在一个循环中存储一次内存。)

此外,Map.Entry由地图的内部数据支持。因此它具有方法setValue,尽管当然不是setKey

Map<String, List<Integer>> test = new TreeMap<>();
for (Map.Entry<String, List<Integer>> entry : map.entrySet()) {
     List<Integer> newList = addRandomValuesToList(entry.getValue());
     entry.setValue(newList);
}

getValue列表也是来自地图的内部数据,并由地图支持。一个人可以做:

entry.getValue().add(42);

addRandomValuesToList:如果确实修改了所传递的条目值,则该方法可以为空,无需对结果做任何事情。

关于错误,我不确定。映射中的每个列表都必须是新实例(new ArrayList<>()等)。