我在为列表中的每个项目获取结果后尝试创建地图。这是我到目前为止所尝试的:
val sourceList: List[(Int, Int)] = ....
val resultMap: Map[Int, Int] = for(srcItem <- sourceList) {
val result: Int = someFunction(srcItem._1)
Map(srcItem._1 -> result)
}
但我在IntelliJ
中遇到类型不匹配错误,我绝对不会在这里编写正确的语法。我不认为我可以使用yield
,因为我不想要地图列表。使用for循环创建Map的正确方法是什么。有什么建议吗?
答案 0 :(得分:3)
最简单的方法是从元组列表中创建地图:
val resultMap = sourceList.map(item => (item._1, someFunction(item._1))).toMap
或者,以monadic方式:
val listOfTuples = for {
(value, _) <- sourceList
} yield (value, someFunction(value))
val resultMap = listOfTuples.toMap
或者,如果您想避免创建listOfTuples
,可以通过调用.view
上的sourceList
然后调用toMap
来使转换变为懒惰:
val resultMap = sourceList.view
.map(item => (item._1, someFunction(item._1)))
.toMap
最后,如果您真的想避免生成额外的对象,可以使用mutable Map代替,并使用+=
或.put