List<TblScmTaskAirlinePartition> tblScmTaskAirlinePartitions = tblScmTaskAirlinePartitionMapper.selectList(wrapper); 用stream流怎么转map
时间: 2024-12-01 14:30:25 浏览: 15
将 `List<TblScmTaskAirlinePartition>` 转换为 `Map<String, TblScmTaskAirlinePartition>` 的 Stream 流处理方式如下:
```java
Map<String, TblScmTaskAirlinePartition> map = tblScmTaskAirlinePartitions.stream()
.collect(Collectors.toMap(
TblScmTaskAirlinePartition::getId, // 使用 getId() 方法作为 key 函数
Function.identity(), // 或者使用 Object本身作为 value,identity() 函数表示保持原样
(oldValue, newValue) -> oldValue, // 如果有冲突,则使用旧值,这里可以省略,因为默认会抛出 IllegalStateException
HashMap::new // 容器类型,这里是 HashMap
));
```
上述代码首先通过 `Stream#collect` 方法收集数据,`toMap` 函数用于创建映射,它需要提供 key 函数、value 映射函数以及合并冲突的策略。在这个例子中,我们假设每个元素有一个 `getId()` 方法作为唯一的键,如果不希望改变已有的元素,就直接忽略合并策略。
相关问题
帮我解释一下下面的代码 public PageResponse<QuestionVo> getQuestionVoByIds(List<Integer> ids) { List<Question> questions = questionMapper.selectBatchIds(ids); List<Answer> answers = answerMapper.selectList(new QueryWrapper<Answer>().in("question_id", ids)); List<QuestionVo> questionVos = questions.stream() .map(question -> { Answer currentQuestionAnswer = answers.stream() .filter(answer -> answer.getQuestionId().equals(question.getId())) .findFirst() .orElse(null); return buildQuestionVoByQuestionAndAnswer(question, currentQuestionAnswer); }).collect(Collectors.toList()); return PageResponse.<QuestionVo>builder() .data(questionVos) .total(questionVos.size()) .build();
这段代码是一个方法,它接受一个整数列表作为参数,返回一个包含QuestionVo对象的PageResponse对象。
首先,代码从数据库中获取与给定id列表匹配的Question对象列表。接着,它使用给定的ids列表查询数据库中与这些ids匹配的Answer对象列表。
然后,代码使用流操作对问题列表进行映射。对于每个问题,它通过筛选与该问题id相匹配的答案对象,并将其构建为QuestionVo对象。最后,使用Collectors.toList()将所有的QuestionVo对象收集到一个列表中。
最后,通过PageResponse.builder()创建一个PageResponse对象,并设置data属性为问题Vo对象列表,total属性为问题Vo对象列表的大小,然后返回该PageResponse对象。
优化下面的代码 public Page<FinanceCodeDTO> selectFinanceCodePage(FinanceCodeListVO financeCodeListVO) { //根据类型关联查询数据信息 Page<FinanceCodeDTO> page = new Page<>(financeCodeListVO.getPageNo(),financeCodeListVO.getPageSize()); Page<FinanceCodeDTO> dtoPage = financeCodeMapper.financeCodeList(page, financeCodeListVO); List<FinanceCodeDTO> dtos = dtoPage.getRecords(); List<String> contractIds = dtos.stream().map(FinanceCodePO::getContractIds).collect(Collectors.toList()); List<Integer> idList = new ArrayList<>(); contractIds.forEach(ids -> { if (ToolUtil.isNotEmpty(ids) && !ToolUtil.equals("[]",ids)){ List<Integer> list = JSONObject.parseArray(ids, Integer.class); idList.addAll(list); } }); if (ToolUtil.isNotEmpty(idList)){ CustomerContractPO customerContractPO = new CustomerContractPO(); List<CustomerContractPO> customerContractPOS = customerContractPO.selectList(new QueryWrapper<>(customerContractPO).lambda().in(CustomerContractPO::getCustomerContractId, idList)); Map<Integer, String> map = customerContractPOS.stream().collect(Collectors.toMap(CustomerContractPO::getCustomerContractId, CustomerContractPO::getContractName)); dtos.forEach(dto ->{ if (ToolUtil.isNotEmpty(dto.getContractIds())&& !ToolUtil.equals("[]",dto.getContractIds())){ List<Integer> list = JSONObject.parseArray(dto.getContractIds(), Integer.class); List<String> names = new ArrayList<>(); list.forEach(id ->{ names.add(map.get(id)); }); dto.setContractName(String.join(",",names)); } }); dtoPage.setRecords(dtos); } return dtoPage ; }
&& ids.contains(",")) { String[] idsArr = ids.split(","); Arrays.stream(idsArr).forEach(id -> { idList.add(Integer.parseInt(id)); }); } }); List<ContractDTO> contractDTOList = contractMapper.selectContractByIdList(idList); dtos.forEach(dto -> { dto.setContractList(contractDTOList); }); return dtoPage; }答:根据给定的代码,优化的思路是把contractIds通过Arrays.stream()和Integer.parseInt()转换为idList,并通过contractMapper.selectContractByIdList()获取contractDTOList,最后把contractDTOList赋给dtos中每个dto对象。
阅读全文