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

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);
}


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

最佳答案

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

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<>()等)。

10-04 11:55