2012-04-17 33 views
0

如何仅从类列表中获取确切属性,例如,如何仅从类列表中获取确切属性

case class Person(name: String, age: Int) 

val a = Person("a", 1) 
val b = Person("b", 1) 
val persons = List(a, b) 

val names = ??? 

assertEquals(List("a", "b"), names) 

回答

3

试试这个:

scala> val names = persons.map(_.name) 
names: List[String] = List(a, b) 

或者这样,如果你想在同一时间访问多个字段:

scala> val names = persons.map{ case Person(name, age) => name } 
names: List[String] = List(a, b) 
+0

很好,谢谢,你也可以加上这个s'val names = persons.map {case p:Person => p.name}'给你的回答 – yons88 2012-04-17 16:25:18

+2

@ yons88,'case p:Person => p.name'只是一种更详细的书写'_.name '。类型注释是不必要的,因为Scala已经知道它正在'List [Person]上运行,而'p => p.name'只是'_.name'的一个更详细的版本。 – dhg 2012-04-17 16:27:14

0

,你也可以做 for { person <- persons } yield person.name 这基本上是与地图相同的东西