Java8 List集合中的部份数据,按条件根据某个字段进行合并

您所在的位置:网站首页 字段的什么属性可以指定输入数据的条件 Java8 List集合中的部份数据,按条件根据某个字段进行合并

Java8 List集合中的部份数据,按条件根据某个字段进行合并

2024-07-14 03:06| 来源: 网络整理| 查看: 265

前言:

在销售医药产品时,如果是中药销售,因为没有批号,所以将查询出来的数据全部按单位进行合并其库存后再销售

一、创建Product类 @Data public class Product { /**id*/ private String productId; /**库存*/ private double stockCount; /**采购数量*/ private double purchaseCount; /**单位*/ private String unit; } 方法一:通过java的map来实现 List list = new ArrayList(); list.add(new Product(1, 10, 10)); list.add(new Product(2, 11, 11)); list.add(new Product(1, 12, 12)); //如果是中药,合并库存 Map map = new HashMap(); for (Product productVO : list) { String id = productVO.getProductId(); if (map.containsKey(id)) { Product s = map.get(id); String unit = s.getUnit(); if (“KG".equalsIgnoreCase(unit) ||"千克".equalsIgnoreCase(unit) || "克".equalsIgnoreCase(unit) || "g".equalsIgnoreCase(unit)) { s.setStockCount(s.getStockCount().add(productVO.getStockCount())); s.setPurchaseCount(s.getPurchaseCount().add(productVO.getPurchaseCount())); } map.put(id, s); } else { map.put(id, productVO); } } List newList = new ArrayList(); for (String temp : map.keySet()) { newList.add(map.get(temp)); } System.out.println(newList ); 方法二:通过Lamba表达式的groupingBy来实现 List list = new ArrayList(); list.add(new Product(1, 10, 10)); list.add(new Product(2, 11, 11)); list.add(new Product(1, 12, 12)); List newList = new ArrayList(); list.parallelStream().collect(Collectors.groupingBy(Product::getProductId, Collectors.toList())) .forEach((id, stu) -> { stu.stream().reduce((a, b) -> new Product (a.getProductId(), a.getStockCount() + b.getStockCount(), a.getpurchaseCount() + b.getpurchaseCount())).ifPresent(newList ::add); }); System.out.println(newList ); 方法三:使用Lamba表达式的toMap来实现 List removalList = saleOrderDetails.stream() .collect(Collectors.toMap(Product::getProductId, a -> a, (o1, o2) -> { o1.setStockCount(o1.getStockCount().add(o2.getStockCount())); o1.setSaleCount(o1.getSaleCount().add(o2.getSaleCount())); o1.setSellAmount(o1.getSellAmount().add(o2.getSellAmount())); return o1; })) .values() .stream() .filter(d -> { return Objects.equals(d.getIsRxDrug(), 1) && Objects.equals(d.getIsNeedPrescription(), 1); }) .collect(Collectors.toList());

QQ群:722865146 分布式商城下载:https://gitee.com/charlinchenlin/wysmall



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3