2017-07-25 88 views
0
case class Company(name: String, locations: List[Location]) 
case class Location(name: String, address: String) 

val m = Map[String, Location](....) 

如何返回所有键的所有地址列表?如何返回地图中所有键的所有地址值

这个我试过,到目前为止,但它不工作:

val addressValues: List[String] = m.mavValues(x => x.locations) 

回答

0

val addressValues: List[String] = m.values.map(_.address).toList 看类型和apimapValues返回新的Map

1

你需要.map并获得位置,这将给你Iterable[Location]

scala> val m = Map[String, Location]("prayagupd" -> Location("First hill", "England"), 
            "blankman" -> Location("Blank hill", "Blank States")) 
m: scala.collection.immutable.Map[String,Location] = Map(prayagupd -> Location(First hill,England), blankman -> Location(Blank hill,Blank States)) 

scala> m.map { case (name, location) => location } 
res10: scala.collection.immutable.Iterable[Location] = List(Location(First hill,England), Location(Blank hill,Blank States)) 

如果你需要的位置名称,

scala> m.map { case (_, location) => location.name } 
res14: scala.collection.immutable.Iterable[String] = List(First hill, Blank hill) 

或者,你可以简单地做.values这也给出Iterable[Location]

scala> m.values 
res2: Iterable[Location] = MapLike.DefaultValuesIterable(Location(First hill,England), Location(Blank hill,Blank States)) 
+0

在地图上'values'函数返回的所有值,从而无需使用'map'了点。 –

0

Map上,.values函数返回所有值的Iterable

> val m1: Map[String, Location] = ??? 
> m1.values 
res0: Iterable[Location] = MapLike(Location(..)) 

或者,如果你有一个Map[String, Company]

> val m2: Map[String, Company] = ??? 
> m2.mapValues(_.locations).values.flatten 
res1: Iterable[Location] = List(Location(..)) 
相关问题