== 和 equals
对于String , == 是在判断两者是否为同一存储地址
对于数值,==是在判断两者的值是否相同
对于String,equals是在判断两者的“值”是否相同,并不比较地址
例子
其实上面的知识点,心理是知道的
但是,往往有时误以为返回的是数值而非String
为了省事直接使用了==
下面的例子,我最开始使用的==进行判断
List<Video> videosInChapter = videos.stream().filter(video->video.getChapterId()==chapter.getId()).collect(Collectors.toList());
如上,得到的过滤后的数据一直为空,排查了很长时间
@Override
public List<ChapterVo> nestedList(String courseId) {
//组装章节列表
QueryWrapper<Chapter> chapterQueryWrapper = new QueryWrapper<>();
chapterQueryWrapper.eq("course_id",courseId);
List<Chapter> chapters = baseMapper.selectList(chapterQueryWrapper);
QueryWrapper<Video> videoQueryWrapper = new QueryWrapper<>();
videoQueryWrapper.eq("course_id",courseId);
List<Video> videos = videoMapper.selectList(videoQueryWrapper);
List<ChapterVo> chapterVos = new ArrayList<>();
chapters.forEach(chapter -> {
ChapterVo chapterVo = new ChapterVo();
BeanUtils.copyProperties(chapter,chapterVo);
List<VideoVo> videoVos = new ArrayList<>();
List<Video> videosInChapter = videos.stream().filter(video->video.getChapterId().equals(chapter.getId())).collect(Collectors.toList());
videosInChapter.forEach(video -> {
VideoVo videoVo = new VideoVo();
BeanUtils.copyProperties(video,videoVo);
videoVos.add(videoVo);
});
chapterVo.setChildren(videoVos);
chapterVos.add(chapterVo);
});
return chapterVos;
}