【问题标题】:How to change Map<String, List<Integer>> to Map<String, Integer> [closed]如何将 Map<String, List<Integer>> 更改为 Map<String, Integer> [关闭]
【发布时间】:2020-10-02 02:08:56
【问题描述】:

我创建了一个Map&lt;String, List&lt;Integer&gt;&gt; 来针对一个键存储多个值。现在我想对 List 中的所有值求和并将类型更改为 Map&lt;String, Integer&gt;。我如何使用 Java 8 流来做到这一点?没有它是否可以做同样的事情

【问题讨论】:

标签: java


【解决方案1】:

这是一种不使用流的方法:

Map<String, Integer> resultMap = new LinkedHashMap<>();
sourceMap.forEach((k, v) -> v.forEach(e -> resultMap.merge(k, e, Integer::sum)));

这使用Map.merge 方法来执行归约。

带有流的版本如下:

Map<String, Integer> resultMap = sourceMap.entrySet().stream()
    .flatMap(e -> e.getValue().stream()
        .map(v -> new AbstractMap.SimpleEntry<>(e.getKey(), v)))
    .collect(Collectors.toMap(
        e -> e.getKey(),
        e -> e.getValue(),
        Integer::sum));

【讨论】:

  • sourceMap.forEach((k, v) -> resultMap.merge(k, v, Integer::sum));给出错误。我找到了 sourceMap.forEach((k,v)-> resultMap.put(k,v.stream().mapToInt(Integer::intValue).sum()));可以代替。
  • @soumya-kole 感谢您指出错误!我将包含修复程序
【解决方案2】:

朋友来了

    Map<String,Integer> output new HashMap<String,Integer>();
    Map<String,List<Integer>> gfg = new HashMap<String,List<Integer>>(); 
    for (Map.Entry<String,List<Integer>> entry : gfg.entrySet()){  
         Integer int = 0;
         for (Integer i :entry.getValue()){
              int+=i
         }
         output.put(entry.getKey(),Integer.toString(int));
         System.out.println("Key = " + entry.getKey() + 
                           ", Value = " + entry.getValue()); 
    }

这是一种更开放的方法,可以进行细微的更改

【讨论】:

  • 我明白了……它也可以,谢谢
【解决方案3】:

@fps 已经发布了一个很好的答案,您可以使用流尝试这种简单的方法

Map<String, Integer> resultMap = 
        sourceMap.entrySet()
                 .stream()
                 .collect(Collectors.toMap(e -> e.getKey(), 
                                    e -> e.getValue().stream().mapToInt(i -> i).sum()));

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2017-03-21
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多