java - 使用循环用数组填充键时,哈希映射键重新调整为空
问题描述
List<LineOfBusiness> lobArray = new ArrayList<>();
Map<String,String> params = new LinkedHashMap<>();
List<String> scoreValues = Stream.of(StandardizedScore.values())
.filter(o -> !o.getExpectedAction().trim().isEmpty())
.map(o -> String.format("%s,%s,%s", o.getClaimScore(), o.getNetworkScore(), o.getExpectedAction()))
.collect(Collectors.toList());
for (LineOfBusiness lob : LineOfBusiness.values()) {
lobArray.add(lob);
}
for (int i = 0; i < lobArray.size(); i++){
for (int j = 0; j < scoreValues.size(); j++) {
System.out.println(params.put(lobArray.get(i).toString(), scoreValues.get(j)));
}
}
当我尝试HashMap
使用params.put(lobArray.get(i), scoreValues.get(j))
键填充时,返回为空。当我在循环中使用System.out.println(lobArray.get(i));
. 我尝试调试代码,然后它也从列表中获取值。
当我将lobArray
值作为键添加到HashMap
. 如果有人能发现出了什么问题,我将不胜感激。
解决方案
您正在将值正确插入到地图中。这只是印刷的问题。只有在将值插入地图后,您才应该打印地图的内容。
这就是我的意思:
for (int i = 0; i < lobArray.size(); i++){
for (int j = 0; j < scoreValues.size(); j++) {
params.put(lobArray.get(i).toString(), scoreValues.get(j));
}
}
System.out.println(params);
或者,如果您想遍历映射条目,请使用entrySet
,并像这样执行它:
for (Map.Entry<String, String> param : params.entrySet()) {
System.out.println(param);
}
现在,您进入null
代码的原因。根据Map
javadoc,该put
方法返回:
与 key 关联的前一个值,如果没有 key 映射,则返回 null。(如果实现支持空值,则返回空值还可以指示映射先前将空值与键关联。)
您之前没有与密钥关联的任何值,这null
就是打印的原因。
推荐阅读
- yii2 - Yii2:如何将数据库控制台迁移参数设置为数组
- .net - 为什么 DirectoryEntry.Invoke("SetPassword", value) 触发 Credential Required CryptoAPI Private Key
- c# - 在 C# 中实现部分递归函数
- sql - SQL Server:将表连接到自身以水平显示数据
- c++ - 有没有办法从模板参数和字符串中生成模板类中的类型
- promise - 量角器测试+管理执行顺序
- mysql - 使用 SQL 数据库查询以不同的时间间隔减去相同的列值
- r - dplyr sample_n 通过一个变量通过另一个变量
- wordpress - 我完全空白的 Wordpress 主题是如何工作的?
- regex - 在 Bash 中匹配一个不包含另一个字符串的字符串?