stream流部分使用

stream流部分使用

提示:以下是本篇文章正文内容,下面案例可供参考

一、Java stream流的使用案例

1.stream流依据条件分组

代码如下(示例):

List<ProdIncomeDTO> query = prodIncomeService.query(prodIncomeQuery);
        if(CollectionUtils.isEmpty(query)){
            throw new BizException(500, "获取数据失败");
        }
        Map<String, List<ProdIncomeDTO>> collect = query.stream().collect(Collectors.groupingBy(e -> e.getBenCode() + "," + e.getProductId()));

2.stream流转Map指定key-value

代码如下(示例):

List<CustomerApiDTO> customerApiDTOS = customerSummaryService.queryCustomerList(customerQuery);
        log.info("投资人信息集合-------------------->" + customerApiDTOS);
        //理财经理ID(电话号码)集合  map
        Map<String,String> customerIdMap = customerApiDTOS.stream().
                collect(Collectors.toMap(CustomerApiDTO::getCustomerId,CustomerApiDTO::getAccountManagerCode, (k1,k2) -> k2));

3.stream流获取集合每个对象的的属性集合

代码如下(示例):

List<String> deptIdList = customerApiDTOS.stream().map(CustomerApiDTO::getAccountManagerOrg).collect(Collectors.toList());

4.stream流filter依据条件获取对应的值

代码如下(示例):

CustomerApiDTO customerApiDTO = customerApiDTOList.stream().filter(customerDTO -> customerDTO.getCustomerId().equals(clearingForceRedeemContractDTO.getInvestorId())).collect(Collectors.toList()).get(0);

5.Map指定排序,

代码如下(示例):

public WtiResponse<Map<String,List<ManagerReservationDetailDTO>>> getBySubProductIdBookingDetailsTest(@RequestBody ManagerReservationDetailQuery managerReservationDetailQuery) {
        if(StringUtils.isBlank(managerReservationDetailQuery.getProductId())){
            throw new BizException(650202001, "产品ID不能为空!");
//            return new WtiResponse<>(HttpStatus.HTTP_INTERNAL_ERROR,"产品ID不能为空!");
        }
        //获取枚举中配置的部门id
        List<String> deptIdList = Stream.of(TeamStateEnum.values()).map(TeamStateEnum::getDeptId).collect(Collectors.toList());
        managerReservationDetailQuery.setDeptIdList(deptIdList);
        List<ManagerReservationDetailDTO> managerReservationDetailDTOS =
                managerReservationDetailService.queryBySubProductIdBookingDetails(managerReservationDetailQuery);
        if(CollectionUtils.isEmpty(managerReservationDetailDTOS)){
            return new WtiResponse<>(HttpStatus.HTTP_OK,"查询不到对应的数据!",new HashMap<>(1));
        }

        HashMap<String,List<ManagerReservationDetailDTO>> map = new LinkedHashMap<>();
        HashMap<Integer,List<ManagerReservationDetailDTO>> newMapTwo = new LinkedHashMap<>();
        HashMap<Integer,List<ManagerReservationDetailDTO>> collectNew = new HashMap<>();


        if(!CollectionUtils.isEmpty(managerReservationDetailDTOS)){
            //1,根据收益级别期限,期限单位将查询出来的数据分组
            Map<String, List<ManagerReservationDetailDTO>> collect =
                    managerReservationDetailDTOS.stream().collect(Collectors.groupingBy(item -> item.getIncomeLevelDeadline() + "," + item.getDeadlineUnit()));

            //2,截取查询出来的数据,之前数据为key转int
            for (Map.Entry<String, List<ManagerReservationDetailDTO>> stringStringEntry : collect.entrySet()) {
                Integer substring = Integer.valueOf(stringStringEntry.getKey().substring(0, stringStringEntry.getKey().indexOf(",")));
                collectNew.put(substring,stringStringEntry.getValue());
            }
            //3,key转int排序再放入新的map集合
            collectNew.entrySet().stream()
                    .sorted(Map.Entry.comparingByKey())
                    .forEachOrdered(x->newMapTwo.put(x.getKey(),x.getValue()));

            ManagerNonIncomeQuery managerNonIncomeQuery = new ManagerNonIncomeQuery();
            managerNonIncomeQuery.setProductId(managerReservationDetailQuery.getProductId());
            List<ManagerNonIncomeDTO> managerNonIncomeDTOList = managerNonIncomeService.query(managerNonIncomeQuery).getRecords();
            log.info("收益级别规模求和集合-------------------->" + managerNonIncomeDTOList);
            Map<String, List<ManagerNonIncomeDTO>> managerNonIncomeMap = new HashMap<>();
            if(!CollectionUtils.isEmpty(managerNonIncomeDTOList)){
                managerNonIncomeMap =
                        managerNonIncomeDTOList.stream().collect(Collectors.groupingBy(item -> item.getIncomeLevelDeadline() + "," + item.getDeadlineUnit()));
            }

            //再对(map{newMapTwo})收益级别期限,期限单位下的list排序(期次倒序,团队顺,预约单时间顺),再重新组装key-value的map返回
            for (Map.Entry<Integer, List<ManagerReservationDetailDTO>> entry : newMapTwo.entrySet()) {
                List<ManagerReservationDetailDTO> entryValue = entry.getValue();
                if(!CollectionUtils.isEmpty(entryValue)){
                    //收益级别期限
                    String deadlineUnit = entryValue.get(0).getIncomeLevelDeadline();
                    //附加期限
                    String incomeLevelDeadline = entryValue.get(0).getAdditionDeadline();
                    //收益权名称
                    String incomeName = entryValue.get(0).getIncomeName();

                    List<ManagerNonIncomeDTO> nonIncomeDTOS =
                            managerNonIncomeMap.get(entryValue.get(0).getIncomeLevelDeadline() + "," + entryValue.get(0).getDeadlineUnit());
                    String bigDecimal = null;
                    if(!CollectionUtils.isEmpty(nonIncomeDTOS)){
                        bigDecimal = nonIncomeDTOS.stream().map(dto ->{
                            if(null == dto || null == dto.getIncomeSale()){
                                return BigDecimal.ZERO;
                            }else {
                                return dto.getIncomeSale();
                            }
                        }).reduce(BigDecimal.ZERO, BigDecimal::add).stripTrailingZeros().toPlainString();
                    }else {
                        bigDecimal = String.valueOf(new BigDecimal(BigInteger.ZERO));
                    }

                    DecimalFormat decimalFormat = new DecimalFormat("#,##0");
                    //收益级别募集规模
                    //String incomeScale = entryValue.get(0).getIncomeScale().stripTrailingZeros().toPlainString();
                    String decimal = null;
                    if(StringUtils.isNotEmpty(bigDecimal)){
                        BigDecimal bd = new BigDecimal(bigDecimal);
                        decimal = decimalFormat.format(bd.divide(new BigDecimal("10000")));
                    }else {
                        decimal = decimalFormat.format(new BigDecimal(BigInteger.ZERO));
                    }
                    List<ManagerReservationDetailDTO> managerReservationDetailDTOList =
                            entryValue.stream().sorted(Comparator.comparing(ManagerReservationDetailDTO::getPeriod,Comparator.reverseOrder())
                                    .thenComparing(ManagerReservationDetailDTO::getSortNumber)
                                    .thenComparing(ManagerReservationDetailDTO::getCreatedTime)).collect(Collectors.toList());
                    //重新组装key
                    map.put(incomeName+": "+decimal+"("+deadlineUnit+"+"+incomeLevelDeadline+")",managerReservationDetailDTOList);
                }
            }
        }

        WtiResponse wtiResponse = new WtiResponse();
        wtiResponse.setData(map);
        wtiResponse.setCode(HttpStatus.HTTP_OK);
        wtiResponse.setMsg("预约明细查看成功");
        return wtiResponse;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值