我有一个看起来像这样的地图:
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);
}
这会导致测试图中的某些列表完全为空。我是在做错什么还是我的方法是错的?
答案 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<>()
等)。