[英]How to open an Option[Map(A,B)] in Scala?
I've done enough Scala to know what ugly code looks like. 我已经做了足够的Scala来了解丑陋的代码。 Observe:
观察:
val sm Option[Map[String,String]] = Some(Map("Foo" -> "won", "Bar" -> "too", "Baz" -> "tree"))
Expected output: 预期产量:
: String = Foo=won,Bar=too,Baz=tree
Here's my Tyler Perry code directed by M. Knight Shama Llama Yama: 这是我的M. Knight Shama Llama Yama指挥的Tyler Perry代码:
val result = (
for {
m <- sm.toSeq;
(k,v) <- m
} yield s"$k=$v"
).mkString(",")
However this does not work when sm is None :-( . I get an error saying that Nothing has no "filter" method (it thinks we're filtering on line (k,v) <- m
) Gracias! 但是,当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.