簡體   English   中英

Scala中的集合,如何在地圖中獲取元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM