一个标问id对应多个标签id,拿一串标问id查标问DTO并查出标问DTO内的标签list,现在有一串标签list,如果循环当前标签list,如果当前标签在标问对应的多个标签内,则生成LinkedHashMap<标问id,标问DTO>和LinkedHashMap<标签id,标问ids> 请给出demo
时间: 2024-03-01 12:51:44 浏览: 70
好的,我给您提供一个Java的demo,希望能够帮助您理解:
```java
// 假设标问表的表名为question,标签表的表名为tag
// 1. 根据标签列表查询出所有对应的标签id
List<Integer> tagIds = new ArrayList<>();
for (String tagName : tagList) {
Integer tagId = tagDao.getTagIdByName(tagName); // 查询标签id
if (tagId != null) {
tagIds.add(tagId);
}
}
// 2. 根据标签id查询出所有对应的标问id
List<Integer> questionIds = new ArrayList<>();
for (Integer tagId : tagIds) {
List<Integer> ids = tagDao.getQuestionIdsByTagId(tagId); // 查询对应的标问id
if (ids != null && !ids.isEmpty()) {
questionIds.addAll(ids);
}
}
// 3. 根据标问id查询出所有对应的标问DTO
Map<Integer, QuestionDTO> questionMap = new LinkedHashMap<>();
for (Integer questionId : questionIds) {
QuestionDTO questionDTO = questionDao.getQuestionDTOById(questionId); // 查询标问DTO
if (questionDTO != null) {
questionMap.put(questionId, questionDTO);
}
}
// 4. 循环标签列表,对于每个标签,将其对应的标问id存储到LinkedHashMap<标签id,标问ids>中
Map<Integer, List<Integer>> tagQuestionIdsMap = new LinkedHashMap<>();
for (Integer tagId : tagIds) {
List<Integer> ids = new ArrayList<>();
for (Integer questionId : questionIds) {
if (questionMap.containsKey(questionId) && questionMap.get(questionId).getTagIds().contains(tagId)) {
ids.add(questionId);
}
}
if (!ids.isEmpty()) {
tagQuestionIdsMap.put(tagId, ids);
}
}
// 5. 循环所有标问DTO,将其存储到LinkedHashMap<标问id,标问DTO>中
Map<Integer, QuestionDTO> resultMap = new LinkedHashMap<>();
for (Integer questionId : questionIds) {
if (questionMap.containsKey(questionId)) {
resultMap.put(questionId, questionMap.get(questionId));
}
}
```
以上代码仅供参考,需要根据实际情况进行修改。其中,tagDao和questionDao是访问数据库的对象,需要根据实际情况进行实现。
阅读全文