一、从数据中搜集id集合
我就用个分页查询的集合收集所有的id
//分页查询
Page<InteractionQuestion> page = lambdaQuery()
.select(InteractionQuestion.class, tableFieldInfo -> !tableFieldInfo.getColumn().equals("description"))
.eq(query.getCourseId() != null, InteractionQuestion::getCourseId, query.getCourseId())
.eq(query.getSectionId() != null, InteractionQuestion::getSectionId, query.getSectionId())
.eq(query.getOnlyMine() != null, InteractionQuestion::getUserId, userId)
.eq(InteractionQuestion::getHidden, false)
.page(query.toMpPageDefaultSortByCreateTimeDesc());
List<InteractionQuestion> records = page.getRecords();
//健壮性判断
if (CollUtils.isEmpty(records)) {
return PageDTO.empty(page);
}
//遍历records集合 最新的一个回答的id
//收集里面所有的latestAnswerIds 字段
Set<Long> latestAnswerIds = records.stream().map(InteractionQuestion::getLatestAnswerId).collect(Collectors.toSet());
根据上面所查的进行批量查询出po对象
List<InteractionReply> replyList = replyMapper.selectBatchIds(latestAnswerIds);
二、对象转换为map集合(键是对象的主键,值是实体对象)从而达到使用id查询实体的目的
Map<Long, InteractionReply> replyMap = new HashMap<>(records.size());
if (!CollUtils.isEmpty(latestAnswerIds)) {
List<InteractionReply> replyList = replyMapper.selectBatchIds(latestAnswerIds);
转map集合
replyMap = replyList.stream().collect(Collectors.toMap(InteractionReply::getId, u -> u));
}