我开始学习 Scala,但发现了一个令人困惑的问题map。我的代码是这样的:
val mymap = Map(1 -> "james",2 -> "justin")
println(mymap.view.mapValues(x => "hi" + x))
println(mymap.view.mapValues(x => x.toUpperCase))
Run Code Online (Sandbox Code Playgroud)
但结果是
MapView(<not computed>)
MapView(<not computed>)
Run Code Online (Sandbox Code Playgroud)
我正在使用,view.mapValues因为.map已弃用。我需要阅读有关此内容的任何建议或文档吗?
请尝试以下操作:
val mymap = Map(1 -> "james",2 -> "justin")
println(mymap.view.mapValues(x => "hi" + x).toMap)
println(mymap.view.mapValues(x => x.toUpperCase).toMap)
Run Code Online (Sandbox Code Playgroud)
请注意,在 Scala 2.12 中调用mapValues返回一个Map. 在 Scala 2.13 中mapValues已弃用,消息如下:
@deprecated("Use .view.mapValues(f). A future version will include a strict version of this method (for now, .view.mapValues(f).toMap).", "2.13.0")
Run Code Online (Sandbox Code Playgroud)
为了得到一个Map你应该打电话.view.mapValues(f).toMap。如果您不调用,您将获得一个MapViewtoMap实例,该实例未物化。有关更多信息,请阅读精彩文章:Stream vs Views vs Iterators。