首页 > 解决方案 > 创建另一个地图的地图

问题描述

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

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

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

标签: java

解决方案


应尽可能将变量声明为本地变量。(它只会在循环中存储一次内存。)

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<>()或此类)。


推荐阅读