[求助] Java8 Stream中 List<Map<String,Object>> 多字段组合计数问题?
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     |

可以这样写:

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