2017-08-01 34 views
3

我有一个地图,其是以下strucutre的:用java流创建从新地图现有地图

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 

我感兴趣的只是属性X每个ID,我想要做一些处理,并将其存储新的地图 这将具有相同的确定指标地图>

我想这在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. 
     }) 
} 

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

回答

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"键的值构造的。

+0

我将只需要返回input.entrySet()? – user1692342

+1

@ user1692342哦,答案固定。 – Eran

+1

@ user1692342修复了另一个错字 – Eran