如何在hashmap(java)中修改key?

carvr3hs  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(889)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

上个月关门了。
改进这个问题
我想更改hashmap中的键。我正在从另一个hashmap制作一个hashmap。
我基本上得到一个身份证,并返回一个名字。
所以基本上我得到的是:

'BOS': 300

但我想得到:

'Boston':300
private Map<MetricName, Map<String, Integer>> getMetric(String regionId, Map<String, String> locationMap){
        Map<MetricName, Map<String, Integer>> metricTargetsMap = analyzeMetaService
                .getMetricTargetsForRegion(regionId);
        Map<MetricName, Map<String, Integer>> metricTargetsMapModified = new HashMap<MetricName, Map<String, Integer>>();
        metricTargetsMap.forEach((metricName,targetMap)-> {
                    HashMap<String, Integer> modifiedMap = new HashMap<String, Integer>();
                    targetMap.forEach((location, targetValue) -> modifiedMap.put(locationMap.get(location), targetValue));
            metricTargetsMapModified.put(metricName, modifiedMap);
                }
        );
 return metricTargetsMapModified;
}
zzlelutf

zzlelutf1#

你不能换钥匙。您可以(a)使用旧密钥删除项目,并(b)在新密钥下插入项目。
或者,如果你在做一张新Map,基本上是

entry = oldMap.get(oldKey);
  newKey = ….whatever...;
  newMap.put(newKey, entry);

在封面下,按键上的一些功能被用作在Map中定位条目的机制。因此,如果您能够更改密钥,“some函数”将不再将您带到应该找到条目的位置。

mwyxok5s

mwyxok5s2#

这可以通过重新Map现有Map中的键并重新收集新Map来实现:

private Map<MetricName, Map<String, Integer>> getMetric(String regionId, Map<String, String> locationMap) {
    Map<MetricName, Map<String, Integer>> metricTargetsMap = analyzeMetaService.getMetricTargetsForRegion(regionId);

    return metricTargetsMap
            .entrySet()
            .stream()   // stream of Map.Entry<MetricName, Map<String, Integer>>
            .map(top -> Map.entry(
                    top.getKey(),  // MetricName
                    top.getValue().entrySet()
                                  .stream()  // stream for inner map Map.Entry<String, Integer>
                                  .collect(Collectors.toMap(
                                      e -> locationMap.get(e.getKey()), // remapped key
                                      e -> e.getValue(),  // existing value
                                      (v1, v2) -> v1)  // merge function to resolve possible conflicts
                                  )
            ))
            .collect(Collectors.toMap(
                    Map.Entry::getKey,  // MetricName
                    Map.Entry::getValue // updated map <String, Integer>
            ));
}

相关问题