java - 使用循环用数组填充键时 HashMap 键重新调整为 null

标签 java hashmap

    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 javadocput 方法返回:

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/

相关文章:

java - 从 Map<String, Map<String, Object>> 获取不正确的值

java - 探索 Java 中的线程

java - iText - 将内容添加到现有的 PDF 文件

java - 在 Java 中格式化货币

java - [不支持的密码套件][Java SSLSocket]

java - 如果只有一个编写器线程,我们是否需要同步 java HashMap gets

java - 通过变量从 HashMap 中获取键

java - JAVA中子类调用父类(super class)中重写的函数

java - 安卓 : HashMap is showing only last array item in a Listview field

java - 如何编写哈希的删除方法来删除值?