1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| @Test void collectTest() {
@Data @AllArgsConstructor class Order {
private Integer id;
private String account;
private Integer productCount;
private Double totalAmount; }
List<Order> list = new ArrayList<>(); list.add(new Order(1, "zhangsan", 2, 25.12)); list.add(new Order(2, "zhangsan", 5, 257.23)); list.add(new Order(3, "lisi", 3, 25512.12));
HashMap<String, Order> orderHashMap = list.stream() .parallel() .collect( () -> { System.out.println("执行初始化容器操作"); return new HashMap<String, Order>(); }, (HashMap<String, Order> map, Order newOrder) -> { System.out.println("执行新元素添加到容器操作"); String account = newOrder.getAccount(); if (map.containsKey(account)) { Order order = map.get(account); order.setProductCount(newOrder.getProductCount() + order.getProductCount()); order.setTotalAmount(newOrder.getTotalAmount() + order.getTotalAmount()); } else { map.put(account, newOrder); } }, (HashMap<String, Order> map1, HashMap<String, Order> map2) -> { System.out.println("执行并行结果合并操作"); map2.forEach((key, value) -> { map1.merge(key, value, (order1, order2) -> { return new Order(0, key, order1.getProductCount() + order2.getProductCount(), order1.getTotalAmount() + order2.getTotalAmount()); }); }); } ); System.out.println(JSONUtil.parse(orderHashMap)); } }
|