8

我在这里放了一个真正的大脑放屁。我正在使用 Play 框架。我有一个方法,它采用地图并将其转换为 HTML 选择元素。我一个单行器来获取对象列表并将其转换为对象的两个字段的映射,id并且name. 然而,我是一名 Java 程序员,我的 Scala 很弱,我只是忘记了我是如何做到这一点的语法。

我有类似的东西

organizations.all.map {org => /* org.prop1, org.prop2 */ }

任何人都可以完成评论部分吗?

4

2 回答 2

13

我会建议:

map { org => (org.id, org.name) } toMap

例如

scala> case class T(val a : Int, val b : String)
defined class T

scala> List(T(1, "A"), T(2, "B"))
res0: List[T] = List(T(1,A), T(2,B))

scala> res0.map(t => (t.a, t.b))
res1: List[(Int, String)] = List((1,A), (2,B))

scala> res0.map(t => (t.a, t.b)).toMap
res2: scala.collection.immutable.Map[Int,String] = Map(1 -> A, 2 -> B)
于 2013-08-19T16:14:58.810 回答
6

你也可以List从等式中去掉一个中间人,直接去Map这样的:

case class Org(prop1:String, prop2:Int)
val list = List(Org("foo", 1), Org("bar", 2))  
val map:Map[String,Int] = list.map(org => (org.prop1, org.prop2))(collection.breakOut)

使用collection.breakOutas 隐式CanBuildFrom允许您在Map从 a获取 a 的过程中基本上跳过一个步骤List

于 2013-08-19T16:20:45.923 回答