簡體   English   中英

如何在Scala中打開Option [Map(A,B)]?

[英]How to open an Option[Map(A,B)] in Scala?

我已經做了足夠的Scala來了解丑陋的代碼。 觀察:

 val sm Option[Map[String,String]] = Some(Map("Foo" -> "won", "Bar" -> "too", "Baz" -> "tree"))

預期產量:

 : String = Foo=won,Bar=too,Baz=tree

這是我的M. Knight Shama Llama Yama指揮的Tyler Perry代碼:

 val result = (
     for { 
         m <- sm.toSeq; 
         (k,v) <- m
     } yield s"$k=$v"
 ).mkString(",")

但是,當sm為None時,這是行不通的:-(。我收到一條錯誤消息,說Nothing沒有“過濾”方法(它認為我們在(k,v) <- m行上進行過濾)Gracias!

擁抱選項是可迭代的事實

(for {
   map <- sm.iterator
   (k, v) <- map.iterator
  } yield s"$k=$v").mkString(",")

res1: String = "Foo=won,Bar=too,Baz=tree"

無抵抗

scala> val sm: Option[Map[String, String]] = None
sm: Option[Map[String, String]] = None

scala> (for {
   map <- sm.iterator
   (k, v) <- map.iterator
  } yield s"$k=$v").mkString(",")
res44: String = ""
scala> val sm: Option[Map[String,String]] = Some(Map("Foo" -> "won", "Bar" -> "too", "Baz" -> "tree"))
sm: Option[Map[String,String]] = Some(Map(Foo -> won, Bar -> too, Baz -> tree))

scala> val yourString = sm.getOrElse(Map[String, String]()).toList.map({
  case (key, value) => s"$key=$value"
}).mkString(", ")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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