优秀 计算代码整理
2022-09-15 10:05 ly772186472 阅读(45) 评论(0) 收藏 举报批量插入数据 代码 List<RoleDepartment> list = Arrays.asList(depIds).stream().map(e -> { return new RoleDepartment().setRoleId(roleId).setDepartmentId(e); }).collect(Collectors.toList()); roleDepartmentService.saveOrUpdateAll(list);
Map<String, List<DeliveryForm>> gradeMaps = list.stream().collect(Collectors.groupingBy(DeliveryForm::getSpprGrade)); gradeMaps.forEach( (k, v) -> { JSONObject jsonObject = new JSONObject(); BigDecimal quantity = v.stream().map(e -> e.getTicketQuantity()).reduce(BigDecimal.ZERO, BigDecimal::add); jsonObject.put("name", k); jsonObject.put("value", quantity); result.add(jsonObject); });
获取单个字段代码
QueryWrapper<Borrower> borrowerQueryWrapper = new QueryWrapper<>(); borrowerQueryWrapper.select("status").eq("user_id", userId); List<Object> objects = baseMapper.selectObjs(borrowerQueryWrapper); if(objects.size() == 0){ return BorrowerStatusEnum.NO_AUTH.getStatus(); } Integer status = (Integer)objects.get(0); return status;
lendReturnService.saveBatch(lendReturnList); //上面没有假如id属性, 保存数据后 id自动附上去;
下面是将list中 其中两个字段变为map //生成期数和还款记录的id对应的键值对集合 Map<Integer, Long> lendReturnMap = lendReturnList.stream().collect( Collectors.toMap(LendReturn::getCurrentPeriod, LendReturn::getId) );
if(currentPeriod.intValue() == lend.getPeriod().intValue()){//最后一期 //本金 ---某一个字段进行 求和 BigDecimal sumPrincipal = lendItemReturnList.stream() .map(LendItemReturn::getPrincipal) .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal lastPrincipal = lendItem.getInvestAmount().subtract(sumPrincipal); lendItemReturn.setPrincipal(lastPrincipal); //利息 BigDecimal sumInterest = lendItemReturnList.stream() .map(LendItemReturn::getInterest) .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal lastInterest = lendItem.getExpectAmount().subtract(sumInterest); lendItemReturn.setInterest(lastInterest); }
//遍历还款记录列表 for (LendReturn lendReturn : lendReturnList) { //通过filter、map、reduce将相关期数的回款数据过滤出来 //将当前期数的所有投资人的数据相加,就是当前期数的所有投资人的回款数据(本金、利息、总金额) BigDecimal sumPrincipal = lendItemReturnAllList.stream() .filter(item -> item.getLendReturnId().longValue() == lendReturn.getId().longValue()) .map(LendItemReturn::getPrincipal) .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal sumInterest = lendItemReturnAllList.stream() .filter(item -> item.getLendReturnId().longValue() == lendReturn.getId().longValue()) .map(LendItemReturn::getInterest) .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal sumTotal = lendItemReturnAllList.stream() .filter(item -> item.getLendReturnId().longValue() == lendReturn.getId().longValue()) .map(LendItemReturn::getTotal) .reduce(BigDecimal.ZERO, BigDecimal::add); //将计算出的数据填充入还款计划记录:设置本金、利息、总金额 lendReturn.setPrincipal(sumPrincipal); lendReturn.setInterest(sumInterest); lendReturn.setTotal(sumTotal); }
BigDecimal b1 = new BigDecimal("64.7024");//24.698,24.702 BigDecimal b2 = new BigDecimal("4"); System.out.println(b1.add(b2)); System.out.println(b1.subtract(b2)); System.out.println(b1.multiply(b2)); //结果:6.1755。除法保留有效位,不然容易报错 //ROUND_HALF_UP:四舍五入(一般采用这个) System.out.println(b1.divide(b2,3,BigDecimal.ROUND_HALF_UP)); //ROUND_HALF_DOWN:四舍五入,如果结果小数位只比保留位多一位且最后一位为5则不进位 System.out.println(b1.divide(b2,3,BigDecimal.ROUND_HALF_DOWN)); //ROUND_UP:始终加一 System.out.println(b1.divide(b2,3,BigDecimal.ROUND_UP)); //ROUND_DOWN:直接截取 System.out.println(b1.divide(b2,3,BigDecimal.ROUND_DOWN)); //转换为百分比,保留两位小数 String bl = String.valueOf((new BigDecimal(objectHashMap.get("cyfe").toString(). replace(",", "")). divide(total, 4, BigDecimal.ROUND_DOWN)). multiply(new BigDecimal(100)));
List<Map<String, Object>> lendItemReturnDetailList = lendItemReturnService.addReturnDetail(lendReturnId); paramMap.put("data", JSONObject.toJSONString(lendItemReturnDetailList));
浙公网安备 33010602011771号