代码改变世界

优秀 计算代码整理

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));