如何从A类型对象嵌套列表中提取满足X属性条件的B类型对象
解决方案
核心思路
- 原有代码输出的是嵌套的B列表,需要先打平嵌套结构,再过滤符合条件的B对象即可得到结果
- Scala集合提供的
flatMap方法可直接将嵌套集合展开为一维集合,适配该场景需求,且得到的B都是原对象,可直接访问其他属性
实现代码
简洁通用写法
val targetBs = L.flatMap(_.b).filter(_.X == 3)
逻辑说明:
flatMap(_.b)遍历所有A对象,提取每个A内部的B列表,自动拼接为包含所有B对象的一维列表filter(_.X == 3)从全量B列表中筛选出X属性等于3的对象,输出结果完全符合预期。
大数据量优化写法
如果数据量较大,可以提前过滤掉完全没有符合条件B的A对象,减少无用计算:
val targetBs = L .filter(_.b.exists(_.X == 3)) .flatMap(_.b.filter(_.X == 3))
验证效果
替换你示例代码中的res赋值语句后,执行println(targetBs)即可得到预期输出:
List(b:3, b:3)
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

