首页 > 解决方案 > 使用循环用数组填充键时,哈希映射键重新调整为空

问题描述

    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. 如果有人能发现出了什么问题,我将不胜感激。

标签: javahashmap

解决方案


您正在将值正确插入到地图中。这只是印刷的问题。只有在将值插入地图,您才应该打印地图的内容。

这就是我的意思:

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就是打印的原因。


推荐阅读