我有一个查询结果是 List[(Int,String,Double)]
,我需要将它转换为 Map[String,String]
(用于在 html select 列表中显示)。
我的临时解决方案是:
val prices = (dao.getPricing flatMap {
case(id, label, fee) =>
Map(id.toString -> (label+" $"+fee))
}).toMap
一定有更好的方法来实现同样的目标...
我有一个查询结果是 List[(Int,String,Double)]
,我需要将它转换为 Map[String,String]
(用于在 html select 列表中显示)。
我的临时解决方案是:
val prices = (dao.getPricing flatMap {
case(id, label, fee) =>
Map(id.toString -> (label+" $"+fee))
}).toMap
一定有更好的方法来实现同样的目标...
val prices: Map[String, String] =
dao.getPricing.map {
case (id, label, fee) => (id.toString -> (label + " $" + fee))
}(collection.breakOut)
collection.breakOut
方法提供了一个CanBuildFrom
实例,它可以确保即使你从一个List
映射,也会重新构建Map
,这要归功于类型注释,并避免创建中间集合。
更加简要:
val prices =
dao.getPricing.map { case (id, label, fee) => ( id.toString, label+" $"+fee)} toMap
更简短的替代方案:
val prices =
dao.getPricing.map { p => ( p._1.toString, p._2+" $"+p._3)} toMap
breakOut
和类型注释。 - Jean-Philippe Pellet