Scala中如何拼接两个MapView并得到MapView类型的返回结果
问题原因
你遇到的报错是因为Scala集合的View类型的拼接操作++默认返回通用的View[(K, V)]类型,不会自动保留MapView的特化类型:
- 普通严格
Map的concat方法确实会用mapFactory返回Map类型,但View属于惰性视图层级,默认的拼接重载没有针对MapView做特化,得到的结果只是键值对的通用视图,自然没有Map特有的contains等方法。
解决方案
如果要保留惰性视图特性,同时得到MapView类型的结果,只需要将拼接后的通用视图显式转换为MapView即可,该操作不会触发视图元素的实际计算,完全保留惰性特性:
val a = Map(0 -> "0") val b = Map(1 -> "1") // 拼接后显式转换为MapView val c = (a.view ++ b.view).to(MapView) // 现在可以正常调用MapView的方法,不会报错 c.contains(0)
如果不需要保留惰性,也可以直接拼接为实体Map后再转视图(不推荐,会丢失惰性优势):
// 该方法会预先计算所有元素生成实体Map,再包装为视图 val c = (a ++ b).view
内容的提问来源于stack exchange,提问作者Suma
相关产品推荐
相关产品推荐

