java 遍历集合时如果集合中某条数据相同,则将相同数据中的数量、价格、重量算出总和形成单独一条数据

项目中实现了产品出库打印出库单,打印的出库单中有表格,表格中的信息就是出库的信息,现在需求是出库时,在出库信息集合中,如果有相同图号的信息,要将其合并成一条,并计算每条信息中价格、数量、重量的总和形成一条数据,以下是我现在的代码,不知道从哪下手去判断

img

出库单

img

加一个Map,将图号为key,将出库单的一行封装成一个类,将类的对象作为value。
这样循环里每次先从map取值,map有值就把对应的数值相加,无值就在map中添加一条条目,最后遍历map打印在图表中


     @Data
    static class A {
        private String no;
        private Integer num;
        private Long price;

         public A(String no, Integer num, Long price) {
             this.no = no;
             this.num = num;
             this.price = price;
         }
     }


    public static void main(String[] args) {
        List<A> list = new ArrayList<>();
        list.add(new A("1",1,10L));
        list.add(new A("1",2,20L));
        list.add(new A("2",2,30L));
        list.add(new A("3",1,3L));
        list.add(new A("3",2,6L));
        System.out.println(list);

        Map<String, A> collect = list.stream().collect(Collectors.toMap(A::getNo, e -> e, (a, b) -> {
            a.setNum(a.getNum()+b.getNum());
            a.setPrice(a.getPrice()+b.getPrice());
            return a;
        }));

        System.out.println(collect);
    }

rowsData = new ArrayList<>(rowsData.stream().collect(Collectors.toMap(item -> item.get(2), v -> v, (k1, k2) -> {
k1.put(6, (int) k1.get(6) + (int) k2.get(6));
k1.put(7, (Double) k1.get(7) + (Double) k2.get(7));
k1.put(8, (Double) k1.get(8) + (Double) k2.get(8));
return k1;
})).values());
在你组装好数据之后,加一步这个即可。
另外说一句,你们这个响应参数用map真的是不太合适,前后端如果不约定好,沟通成本很高