记录一次java8分组再计算的应用

记录一次java8分组再计算的应用

	List<SmSku> tableData = smOrder.getTableData();
		List<SmSku> categoryList = new ArrayList<>();
		//按批次分组
	tableData.parallelStream().collect(Collectors.groupingBy(o ->o.getRealCategoryChName(),Collectors.toList())).forEach(
			(id, transfer) ->{
				transfer.stream().reduce((a,b) -> new SmSku(a.getNumber()+b.getNumber(),a.getRealCategoryName(),a.getRealCategoryChName())).ifPresent(categoryList::add);
			});

根据某一个字段去重得出一个集合

		//定义list集合
        List<String> boxNos = packageInfoParam.getDetails().stream().map(SaicItemDetail::getBoxNo).distinct().collect(Collectors.toList());

利用TreeSet 集合不重复的特性 ,分组筛选重复的,得出一个新集合

	ArrayList<SaicItemDetail> collect = packageInfoParam.getDetails().stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
				() -> new TreeSet<>(Comparator.comparing(o -> o.getBoxNo()))),
				ArrayList::new));

筛选出同样元素的数据,数量进行累加

//先根据sku+行号 分组
		Map<String, List<SaicItemDetail>> skuAndLineNoGroupCollectMap= packageInfoParam.getDetails().stream().collect(Collectors.groupingBy(o -> o.getItemCode() + "_" + o.getLineNo()));
		//把相同的行号和sku数量 相加
		List<SaicItemDetail> addUpCollect = skuAndLineNoGroupCollectMap.keySet().stream().map(u -> {
			BigDecimal sum = Convert.toBigDecimal(skuAndLineNoGroupCollectMap.get(u).stream().mapToDouble(i -> Convert.toDouble(i.getPackQty())).sum());
			//这里和上面一样的原理,也会影响原list集合中的被指向的地址的对象数据
			SaicItemDetail itemDetail = skuAndLineNoGroupCollectMap.get(u).get(0);
			itemDetail.setPackQty(sum.toString());
			return itemDetail;
		}).collect(Collectors.toList());
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值