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