Scala嵌套Seq集合筛选报错:List[Banner]不存在height成员如何解决
错误原因
- 变量名冲突:filter匿名函数的入参命名为
c,和外层定义的国家筛选参数c = "UK"重名,函数作用域内的c会优先指代当前遍历的Campaign对象,c.country == c逻辑完全失效。 - 类型调用错误:
Campaign的banners字段是List[Banner]集合类型,不是单个Banner实例,不能直接调用.height、.width属性。
修复代码
根据实际需求二选一即可:
场景1:筛选出「国家符合,且至少存在1个符合宽高要求的Banner」的Campaign
val filteredList = myList.filter { camp => camp.country == c && camp.banners.exists(banner => banner.width == w && banner.height == h) }
场景2:筛选出「国家符合,且所有Banner都符合宽高要求」的Campaign
val filteredList = myList.filter { camp => camp.country == c && camp.banners.forall(banner => banner.width == w && banner.height == h) }
你给出的样例数据运行场景1的代码,会正确返回国家为UK、Banner宽高匹配的第二条Campaign记录。
内容的提问来源于stack exchange,提问作者Vakindu
相关产品推荐
相关产品推荐

