booksDetailRelationMap = booksDetailRelationList.stream().collect(Collectors
.toMap(BooksDetailRelation::getBookId, BooksDetailRelation -> BooksDetailRelation));
介绍表:阅读记录与阅读详情关联表
主键id 图书id 阅读记录id 用户id 其他的不重要
介绍下这一段代码:
bookDetailRelationList是从【阅读记录与阅读详情关联表】中取出来的一个集合
原因是:一个阅读记录 - - - > 对应多个图书信息
正常的情况下
拿着阅读记录id去查会得到多个阅读记录关联数据,比如
//查询阅读记录id = 124的数据 得到3条数据
// 这3个关联数据如下
关联表的主键id 图书id 阅读记录id
78 15 124
79 16 124
80 17 124
这个情况是应该是业务最正常的情况,这个情况下,上述代码没有问题!
非正常情况下
拿着阅读记录id去查会得到多个阅读记录关联数据,比如
//查询阅读记录id = 124的数据 得到3条数据
// 这3个关联数据如下
关联表的主键id 图书id 阅读记录id
78 15 124
79 15 124
80 15 124
这个情况是应该是业务最不正常的情况,这个情况下,上述代码就有问题。因为bookId重复了
业务就不说了,使用Stream的时候要避免的这个坑!
总结下:使用Stream组装map时
第一种:提前判断所有的key是否有重复,有就不走这个逻辑
第二种:不判断,前端传来的表单数据能保证这个数据不会重复
总之前后端,你俩至少有一个人做和这个校验。

本文探讨了在Java中使用Stream API组装Map时可能遇到的键重复问题。当从阅读记录与阅读详情关联表中获取数据并尝试用Stream转换为Map时,如果一个阅读记录对应多条图书信息且图书ID重复,会导致Map组装错误。在正常情况下,每个阅读记录ID对应不同的图书ID,代码没有问题。但在异常情况下,若同一阅读记录ID对应相同图书ID的多条数据,就会产生问题。解决办法包括在组装前检查键的唯一性或者确保前端数据不包含重复键。前后端都应对此进行校验,以避免潜在的业务逻辑错误。
5021

被折叠的 条评论
为什么被折叠?



