一个标问id对应多个标签id,一个标签id也对应多个标问id,现在存在一串标问id和一串标签Aids,可以通过查询标问ids生成标问DTOS,每个标问DTO内有对应的标签Bids,Aids内有标签存在Bids内,则生成LinkedHashMap<标问id,标问DTO>和LinkedHashMap<标签id,标问ids> 请用lambda的方式给出demo
时间: 2024-03-01 16:51:53 浏览: 80
好的,以下是使用Lambda表达式的demo:
```java
// 假设标问表的表名为question,标签表的表名为tag
// 1. 根据标问id查询出所有对应的标问DTO
List<QuestionDTO> questionDTOList = questionIds.stream()
.map(questionId -> questionDao.getQuestionDTOById(questionId)) // 查询标问DTO
.filter(Objects::nonNull) // 过滤掉null
.collect(Collectors.toList());
// 2. 生成标签Bids
List<Integer> tagBids = questionDTOList.stream()
.flatMap(questionDTO -> questionDTO.getTagIds().stream()) // 扁平化标签id列表
.distinct() // 去重
.collect(Collectors.toList());
// 3. 生成LinkedHashMap<标签id,标问ids>
Map<Integer, List<Integer>> tagQuestionIdsMap = tagAids.stream()
.filter(tagAid -> tagBids.contains(tagAid)) // 过滤掉不存在Bids中的标签
.collect(Collectors.toMap(
tagAid -> tagAid,
tagAid -> questionDTOList.stream()
.filter(questionDTO -> questionDTO.getTagIds().contains(tagAid)) // 过滤掉不包含当前标签的标问DTO
.map(QuestionDTO::getId)
.collect(Collectors.toList()),
(a, b) -> { throw new RuntimeException("Duplicated tagAid: " + a); },
LinkedHashMap::new
));
// 4. 生成LinkedHashMap<标问id,标问DTO>
Map<Integer, QuestionDTO> questionDTOMap = questionDTOList.stream()
.collect(Collectors.toMap(
QuestionDTO::getId,
Function.identity(),
(a, b) -> { throw new RuntimeException("Duplicated questionId: " + a); },
LinkedHashMap::new
));
```
以上代码仅供参考,需要根据实际情况进行修改。其中,questionDao是访问数据库的对象,需要根据实际情况进行实现。
阅读全文