如何将 Collectors.counting() 合并到现有的 HashMap

How to merge Collectors.counting() to existing HashMap

我目前的目标是将计数值(Collectors.counting())合并到现有的 HashMap, 结构如下:

此数据来自大量具有相同数据的列,
所以这种方式是计算许多相同值的最佳解决方案。

但如果可能的话,我想在插入数据库之前将这些值(Long)放入 HashMap 中。

有什么好的解决办法吗,求助
(或者如果这个结构很糟糕;提前感谢您的建议:))。

谢谢!


原始数据为 List>,
结果数据与 Map 一起出现。

Map<Object, Long> result = errData.stream()
                .collect(Collectors.groupingBy(d -> d, Collectors.counting()));

期望的输出应该是:

result:
  "data" -> 0.0
  "execPlanId" -> "QPLN-20220412-001"
  "columnId" -> "DSCHDRUG"
  "tableName" -> "ODS_APIPDLST" 
  "execId" -> 156
  "errCount" -> 341 (currently on "value" from result HashMap)

首先,将 result 的类型更改为 Map<Map<String, Object>, Long>

然后,您可以iterate/stream此地图并根据需要添加新字段。

List<Map<String, Object>> resWithErrCount = result.entrySet().stream()
        .map(entry -> {
            Map<String, Object> map = new HashMap<>(entry.getKey());
            map.put("errCount", entry.getValue());
            return map;
        })
        .collect(Collectors.toList());

注意:这会创建一个新的 HashMap,其中添加了 errCount 字段,所有映射都将收集到一个列表中。