[英]Collections in scala, how to get elements in map
從lift-json :
scala> val json = parse("""
{
"name": "joe",
"addresses": {
"address1": {
"street": "Bulevard",
"city": "Helsinki"
},
"address2": {
"street": "Soho",
"city": "London"
}
}
}""")
scala> case class Address(street:String, city: String)
scala> case class PersonWithAddresses(name: String, addresses: Map[String, Address])
scala> val joe = json.extract[PersonWithAddresses]
res0: PersonWithAddresses("joe", Map("address1" -> Address("Bulevard", "Helsinki"),
"address2" -> Address("Soho", "London")))
我想訪問joe
元素。 例如,我想知道喬的address1 city
。 怎么樣?
獎勵問題:如果PersonWithAddresses
是
case class PersonWithAddress(name:String, addresses: Map[String, List[Address]])
我將如何提取該列表的大小?
PS問題: joe.addresses("address1").size()
和joe.addresses.get("address1").size
什么joe.addresses.get("address1").size
?
您的問題與json和提升本身無關。 您已經有了對象,只是不知道如何使用Scala集合。
如果沒有列表,您可以通過以下方式獲得城市:
@ joe.addresses("address1")
res4: Address = Address("Bulevard", "Helsinki")
@ res4.city
res5: String = "Helsinki"
或joe.addresses("address1").city
的簡稱。
如果有清單
case class PersonWithAddress(name:String, addresses: Map[String, List[Address]])
您只需在列表中調用size
。
joe.addresses("address1").size
至於兩者之間的區別:
@ res7.addresses("address1").size
res8: Int = 1
@ res7.addresses.get("address1").size
res9: Int = 1
兩者之間有很大的不同,請查看調用get
時會發生什么
@ res7.addresses.get("address1")
res10: Option[List[Address]] = Some(List(Address("Bulevard", "Helsinki")))
它返回一個Option
,可以將其視為大小為0或1的集合。檢查其大小不是您要執行的操作。
map.get("key")
返回一個Option
,如果map中存在Some(value)
,則為Some(value)
否則,返回None
map("key")
或已廢棄的map.apply("key")
返回與key或異常關聯的項目(如果地圖中不存在element)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.