我在这里放了一个真正的大脑放屁。我正在使用 Play 框架。我有一个方法,它采用地图并将其转换为 HTML 选择元素。我有一个单行器来获取对象列表并将其转换为对象的两个字段的映射,id
并且name
. 然而,我是一名 Java 程序员,我的 Scala 很弱,我只是忘记了我是如何做到这一点的语法。
我有类似的东西
organizations.all.map {org => /* org.prop1, org.prop2 */ }
任何人都可以完成评论部分吗?
我在这里放了一个真正的大脑放屁。我正在使用 Play 框架。我有一个方法,它采用地图并将其转换为 HTML 选择元素。我有一个单行器来获取对象列表并将其转换为对象的两个字段的映射,id
并且name
. 然而,我是一名 Java 程序员,我的 Scala 很弱,我只是忘记了我是如何做到这一点的语法。
我有类似的东西
organizations.all.map {org => /* org.prop1, org.prop2 */ }
任何人都可以完成评论部分吗?
我会建议:
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)
你也可以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.breakOut
as 隐式CanBuildFrom
允许您在Map
从 a获取 a 的过程中基本上跳过一个步骤List
。