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

use*_*342 3 java hashmap java-8

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

Map<String, Map<String, String>> input;
Run Code Online (Sandbox Code Playgroud)

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

For ex:
ID:       Attribute    Value
A           X           100
A           Y           200
B           X           40
B           Y           40
Run Code Online (Sandbox Code Playgroud)

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

我正在 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.
        } )
}
Run Code Online (Sandbox Code Playgroud)

我无法理解如何将其添加到新地图中。

Era*_*ran 6

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

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;
                                          }));
}
Run Code Online (Sandbox Code Playgroud)
  • 输出映射的键与输入映射的键相同。

  • 输出映射的值是通过创建一个新映射HashMap<String,String>并将键的值放入其中来构造的"X"。

  • 是否需要“HashMap”?`e -&gt; Collections.singletonMap("X", e.getValue().get("X"))` 会简单得多...... (3认同)