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)));
}
}
当我尝试使用 params.put(lobArray.get(i), ScoreValues.get(j))
填充 HashMap
时,键返回 null。当我使用 System.out.println(lobArray.get(i)); 在循环中打印值时,列表肯定会填充为正确打印的值。我尝试调试代码,它也从列表中获取值。
当我将 lobArray
值作为键添加到 HashMap
中时,出现了问题。如果有人能发现出了什么问题,我将非常感激。
最佳答案
您正在将值正确插入到 map 中。这只是打印的问题。您应该仅在将值插入 map 后打印 map 内容。
这就是我的意思:
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
方法返回:
the previous value associated with key, or null if there was no mapping for key. (A null return can also indicate that the map previously associated null with key, if the implementation supports null values.)
您之前没有与您的 key 关联的任何值,这就是打印 null
的原因。
关于java - 使用循环用数组填充键时 HashMap 键重新调整为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60886605/