当前位置: 首页 > 知识库问答 >
问题:

从Map流中收集Map

宋建柏
2023-03-14

我有一个嵌套的映射,其中key是员工名称,values是另一个映射,其中key是公司名称,value是经验年数,如下所示

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);

现在我的函数应该返回一个映射,以员工姓名为键,以总经验为值。我如何使用java流(在单个流中)做到这一点

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

    return null;
}

共有1个答案

赵经国
2023-03-14

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

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 11,我有一个名为MyObject的对象列表,看起来像这样 我想使用流将这些对象收集到地图中 我试着用收集器来做。toMap(),但似乎不可能做到这一点 我的问题是可以制作一张地图吗

  • 给定诸如之类的流, 我怎样才能最优雅地将它转换成给定的形式: (当然,假设我定义了类对)? 编辑:这不是严格的关于int或基元流。对于任何类型的流,答案都应该是通用的。

  • 问题内容: 鉴于流,例如, 如何最优雅地将其转换为给定形式: (当然,假设我已经定义了Pair类)? 编辑:这不严格有关整数或原始流。对于任何类型的流,答案应该是通用的。 问题答案: 我的StreamEx库扩展了标准流,它pairMap为所有流类型提供了一种方法。对于原始流,它不会更改流类型,但可用于进行一些计算。最常见的用法是计算差异: 对于对象流,你可以创建任何其他对象类型。我的库没有提供任何

  • 问题内容: 我想接受输入并对其应用并行流,然后我希望将输出作为列表。输入可以是任何列表或可以对其应用流的任何集合。 我在这里担心的是,如果我们要输出为map,我们可以从java中选择一个选项,例如 但是我看不到以线程安全的方式从并行流收集以提供列表作为输出的选项。我看到那里还有一个选择 通过这种方式,我们可以在collect方法中提供各种并发实现。但是我认为java.util.concurrent

  • 我想迭代一个对象列表。每个对象都包含一些对象的变量。更具体地说: 我的名单是: 所需的映射结构是:

  • 为了更好地理解新的流API,我试图转换一些旧代码,但我被困在这一个。 我似乎无法为它创建有效的收集器: