jdk8 stream Collectors.toMap 求同id的数量和
今天遇到一个问题,要求将一个list中的同id的对象合并成一个对象,并求指定属性的和
@Test
public void streamToMap() {
List<GoodsInfo> goodsInfoList = Arrays.asList(
new GoodsInfo(1, 2, 3, 1),
new GoodsInfo(1, 2, 3, 1),
new GoodsInfo(1, 2, 3, 1),
new GoodsInfo(3, 4, 3, 1),
new GoodsInfo(3, 2, 3, 1),
new GoodsInfo(2, 2, 3, 2)
);
Map<Integer, GoodsInfo> collect = goodsInfoList.stream().collect(Collectors.toMap(GoodsInfo::getId, goodsInfo -> goodsInfo, (goods1, goods2) -> {
int qty = goods1.getQty();
int qty1 = goods2.getQty();
goods1.setQty(qty + qty1);
int ttx = goods1.getTtx();
int ttx1 = goods2.getTtx();
goods1.setTtx(ttx + ttx1);
int yyg = goods1.getYyg();
int yyg1 = goods2.getYyg();
goods1.setYyg(yyg + yyg1);
return goods1;
}));
System.out.println(JSONObject.toJSONString(collect));
}
得出结果:

特此记录下

浙公网安备 33010602011771号