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);
}
这会导致测试地图中的某些列表完全为空。我做错了什么还是我的方法错了?
解决方案
应尽可能将变量声明为本地变量。(它只会在循环中存储一次内存。)
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<>()
或此类)。
推荐阅读
- python - 如何使用诱变剂打印 ID3 标签
- go - path.Join 的可移植性用于 URL 路径
- android - AccountsManager.get(this).getAccounts 始终为 0
- android - 如何使用 RestTemplate 在响应正文(身份验证 Web 服务)中返回令牌?
- c# - 将 byte[] 转换为显式结构的最简单方法
- mysql - MySQL 到 H2 DDL 的问题
- .net - 无法解析 ASP.NET Core DI 类型的服务
- javascript - 有时数据不会从数据库中填充
- angular - 在 Array 中分配新的或更新的实例
- javascript - 获取文本中的点击位置(非输入)