[求助] Java8 Stream中 List> 多字段组合计数问题?

发布于 2022-09-12 22:43:00 字数 1513 浏览 18 评论 0

Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("check_state","0");
map1.put("company_id","1");
map1.put("item_id","01");

Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("check_state","0");
map2.put("company_id","1");
map2.put("item_id","01");

Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("check_state","0");
map3.put("company_id","1");
map3.put("item_id","02");

Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("check_state","1");
map4.put("company_id","2");
map4.put("item_id","01");

List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
| 序号 | check_state | company_id | item_id |
|   1  |      0      |      1     |    01   |
|   2  |      0      |      1     |    01   |
|   3  |      0      |      1     |    02   |
|   4  |      1      |      2     |    01   |

请问在这种list中,如何利用stream()流,计算每个不同公司(company_id)的每个不同项目(item_id)的checek_state为0的数据的数量,并将这个数量数据增加到对应行,即以下形式,再生成新的List<Map<String,Object>>?

| 序号 | check_state | company_id | item_id | new_count |
|   1  |      0      |      1     |    01   |     2     |
|   2  |      0      |      1     |    01   |     2     |
|   3  |      0      |      1     |    02   |     1     |
|   4  |      1      |      2     |    01   |     0     |

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

久隐师 2022-09-19 22:43:00

可以这样写:

Map<String,Integer> mc = list.stream()
      .filter(t->"0".equals(t.get("check_state")))
      .collect(Collectors.toMap(t->t.get("company_id").toString() + "-" + t.get("item_id").toString(),t->1,(n1,n2)->n1+n2));
list.forEach(t->{
   t.put("new_count",mc.getOrDefault(t.get("company_id").toString() + "-" + t.get("item_id").toString(),0));
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文