java - 从 Map<String, Map<String, Integer>> 流中收集 Map<String, Integer>

标签 java java-stream collectors

我有一个嵌套映射,其中键作为员工姓名,值作为另一个映射,键作为公司名称,值作为多年经验,如下所示

Map<String, Map<String, Integer>> map = new HashMap<>();
    Map<String, Integer> innerMap1 = new HashMap<>();
    innerMap1.put("INfosys", 2);
    innerMap1.put("Volvo", 2);
    innerMap1.put("MH", 3);
    innerMap1.put("Piterion", 1);

    Map<String, Integer> innerMap2 = new HashMap<>();
    innerMap2.put("Tata", 2);
    innerMap2.put("Bosch", 1);
    innerMap2.put("Amber", 1);
    innerMap2.put("E2", 1);

    map.put("Rahul", innerMap1);
    map.put("Amrita", innerMap2);

现在我的函数应该返回一个 map ,其中员工姓名作为键,总经验作为值。我怎样才能使用 java 流(在单个流中)做到这一点

public Map<String, Integer> getEmployeesWithExp(Map<String, Map<String, Integer>> map) {
    map.entrySet().stream().
                        ...

    return null;
}

最佳答案

可能有多种方法,但您可以收集条目到一个新映射中,并将内部映射的值减少为整数,例如像这样:

Map<String, Integer> result = 
           map.entrySet().stream()
              .collect( 
                  Collectors.toMap(e -> e.getKey(), //or Map.Entry::getKey
                                    e -> e.getValue().values().stream()
                                                      .reduce(0, Integer::sum)));

关于java - 从 Map<String, Map<String, Integer>> 流中收集 Map<String, Integer>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376037/

相关文章:

java - 如何在jsp应用程序中将servlet加载为首页并管理其他servlet

java - "this.this$0"是什么意思?

java - 使用 SOAP Web 服务 - Java VS PHP

java - anyMatch 和 allMatch

java - 使用流从 Map 对象列表中仅获取键

Java,Collectors.toList() 只创建一个元素

java - 如何在流中结合统计数据和映射器?

java - 是否有更有效的方法来迭代字符串直到到达某个字符?

java - 使用 Java 流对集合进行分组

java - Collectors.groupby 用于 Map<String,List<String>