Scala类型不匹配求助:Array[Map[String,Array[Map[String,Long]]]]类型不符
解决Scala类型不匹配:Buffer转Array问题
嘿,刚学Scala遇到这种类型不匹配太正常了,我来帮你捋清楚问题在哪~
问题根源
错误提示已经说得很直白:你当前代码生成的是嵌套的可变Buffer结构,但目标类型要求的是嵌套的Array结构。原因在于Scala中asScala方法(用来把Java集合转成Scala集合)默认返回的是可变的Buffer,而不是你需要的不可变Array。
修正方案
只需要在每个asScala.map(...)的末尾加上.toArray,把可变Buffer转换成目标需要的Array就行,具体修正后的代码如下:
val rawFacets: Array[Map[String, Array[Map[String, Long]]]] = response.getFacetFields.asScala.map(facetGroup => { val name = facetGroup.getName.toString val values = facetGroup.getValues.asScala.map(facet => { Map(facet.getName -> facet.getCount) }).toArray // 将内层Buffer转为Array Map(name -> values) }).toArray // 将最外层Buffer转为Array
关键修改点拆解
- 内层
values部分:facetGroup.getValues.asScala.map(...)原本返回Buffer[Map[String,Long]],加上.toArray后就变成了目标要求的Array[Map[String,Long]] - 最外层集合:
response.getFacetFields.asScala.map(...)原本返回Buffer[Map[String, ...]],加上.toArray后就转换成了最终需要的Array[Map[String, ...]]
小提示
如果之后你需要其他不可变集合(比如List),也可以用类似的.toList方法转换,Scala的集合转换API非常灵活哦~
内容的提问来源于stack exchange,提问作者Avi Kaminetzky
相关产品推荐
相关产品推荐

