You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中将字符串列表折叠为Map[String,Boolean]的报错问题求助

问题根因
  • 聚合方法选择错误:Scala 标准库中fold方法的签名限制了初始值、聚合结果必须和列表元素是同类型/超类型,你要从String元素聚合为Map类型,类型不匹配,编译器会自动推断公共超类型为Object,因此报出Object不存在+、size方法的错误,跨类型聚合应该使用foldLeft方法。
  • 初始值格式错误:你传入的Map[String,Boolean]是类型声明,而非空Map实例,需要改为Map.empty[String, Boolean](更推荐)或者Map[String, Boolean]()。
  • 运算优先级问题:key -> key.size < 8的写法会让编译器优先执行<判断,你需要把key.size < 8用括号包裹,明确它是元组的值部分。
解决方案

方案1:使用foldLeft实现(和你给出的JS reduce逻辑完全对齐)

val mappedObject = objectKeys.foldLeft(Map.empty[String, Boolean])((acc, curr) => 
  acc + (curr -> (curr.size < 8))
)

方案2:更简洁的Scala原生写法

不需要手动折叠,直接转换后转Map即可:

val mappedObject = objectKeys.map(key => key -> (key.size < 8)).toMap

两种写法得到的结果都和预期完全一致:

Map(Name -> true, Place -> true, Animal -> true, Thing -> true)

内容的提问来源于stack exchange,提问作者Shivam Sahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:45:04