Kotlin中如何基于userId将User、Book、Order三个列表合并为单个对象
Kotlin按userId关联多列表数据实现方案
1. 定义返回结构Result类
首先声明用于承载关联结果的数据类:
data class Result( val user: User, val books: List<Book>, val orders: List<Order> )
2. 关联逻辑实现
先对书籍、订单按userId做预分组,避免重复遍历提升查询效率,再匹配用户生成最终结果:
// 书籍按userId分组 val bookGroupByUserId = books.groupBy { it.userId } // 订单按userId分组 val orderGroupByUserId = order.groupBy { it.userId } // 生成关联结果列表 val result = users.map { user -> Result( user = user, books = bookGroupByUserId[user.id].orEmpty(), orders = orderGroupByUserId[user.id].orEmpty() ) }
结果说明
基于你提供的示例输入,最终生成的result列表包含3个元素:
- u1对应结果:包含2本关联书籍、3个关联订单
- u2对应结果:包含1本关联书籍、1个关联订单
- u3对应结果:无关联书籍和订单,两个列表均为空
不属于现有用户的关联数据(如userId为ux的书籍)会自动过滤,不会纳入结果。
内容的提问来源于stack exchange,提问作者Sharan
相关产品推荐
相关产品推荐

