使用java流从现有地图创建新地图

时间:2017-08-01 06:19:42

标签: java java-8 hashmap

我有一张以下结构的地图:

Map<String, Map<String, String>> input;

它基本上包含一组ID,并为每个ID包含与属性关联的值。

For ex:
ID:       Attribute    Value
A           X           100
A           Y           200
B           X           40
B           Y           40

我只对每个ID的属性X感兴趣,我想做一些处理并将其存储为新地图 这将具有相同的定义Map&gt;

我在Java 8中尝试这个:

Map<String, Map<String, String>> getResults(Map<String, Map<String, String>> input) {
    input.entrySet().stream()
        .map(id -> {
            String valueX = id.getValue().get("X");
            String computeX = compute(valueX);
            // Now start adding these results to the new map.
        } )
}

我无法关注,如何将其添加到新地图中。

1 个答案:

答案 0 :(得分:4)

您可以通过以下方式将输入地图的条目收集到新地图中:

Map<String, Map<String, String>> getResults(Map<String, Map<String, String>> input) 
{
    return input.entrySet()
                .stream()
                .collect(Collectors.toMap(Map.Entry::getKey,
                                          e -> {
                                              Map<String,String> map = new HashMap<>(); 
                                              map.put("X",e.getValue().get("X")); 
                                              return map;
                                          }));
}
  • 输出地图的键与输入地图的键相同。

  • 输出地图的值是通过创建新的HashMap<String,String>并在其中输入"X"键的值来构建的。