项目中实现了产品出库打印出库单,打印的出库单中有表格,表格中的信息就是出库的信息,现在需求是出库时,在出库信息集合中,如果有相同图号的信息,要将其合并成一条,并计算每条信息中价格、数量、重量的总和形成一条数据,以下是我现在的代码,不知道从哪下手去判断
出库单
加一个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真的是不太合适,前后端如果不约定好,沟通成本很高