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

得出结果:

特此记录下

posted @ 2021-12-26 10:21  奋斗者丶森  阅读(569)  评论(0)    收藏  举报