java - 使用 Java 流从现有 map 创建新 map

标签 java java-8 hashmap

我有一个具有以下结构的 map :

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 中 将具有相同的定义 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.
        } )
}

我无法理解如何将其添加到新 map 。

最佳答案

您可以通过这种方式将输入 map 的条目收集到新 map 中:

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" 的值放入其中键。

关于java - 使用 Java 流从现有 map 创建新 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45430264/

相关文章:

java - java.lang.NoClassDefFoundError:无法解决以下问题:Lcom/fasterxml/jackson/databind/ObjectMapper

java - Tomcat 6 启动时的警告和错误

Java 双冒号运算符引用 (::)

java - 什么 Java 库对象封装了数字和 `TimeUnit`?

java - 如何在Java中实现以二进制数组为键、二进制数组为值的缓存

Java EE、Eclipse、Tomcat Simple Servlet 启动错误

java - 为什么我的代码中会间歇性地发生死锁?

Java 8 : Applying Stream map and filter in one go

java - java中HashMap.containsValue()的时间复杂度是多少?

java - HashMap.computeIfAbsent 在多线程使用下如何失败?