我有兩個集合 - spells和charms。
charms可能是空的
我需要對spells和charms的組合進行Magic,如果charms為空,我需要單獨對spells進行Magic
對于非空的charms來說,這樣做的效果是:
def hocusPocus(咒語。Seq[String], charms: Seq[String])。) Seq[Magic] = {
for {
spell <- 咒語
charm <- charms
} yield {
new Magic(spell, Some(charm))
}
}
這個代碼段簡單而干凈,但是對于空的charms來說,它不會產生Magic
如果一個人沒有charms,是否有可能從spells中做一些Magic,只有這樣一個明確的方式?
uj5u.com熱心網友回復:
這是一個直接使用flatMap map而不是使用for(IMHO)
的情況。
另外,相對于Seq,更傾向于使用List這樣的具體集合也是一個很好的用例
def hocusPocus(咒語。List[String], charms: List[String])。) List[Magic] =
spells.flatMap { spell =>
Magic(spell, None) :: charms.map(charm => Magic(spell, Some(charm))
}
現在,如果你只需要咒語的Magic,當且僅當魅力是空的,你可以這樣做:
def hocusPocus(spells。Seq[String], charms: Seq[String])。) Seq[Magic] =
if (charms.isEmpty)
spells.map(spell => Magic(spell, None)
else[/span
spells.flatMap { spell =>
charms.map { charm =>
Magic(spell, Some(charm))
}
}
uj5u.com熱心網友回復:
如果有可能將Magic.charm的型別改為java.io.Serializable
你可以寫:def hocusPocus(咒語。Seq[String], charms: Seq[String])。) Seq[Magic] = {
for {
法術 <- 法術
charm <- if (charms.isEmpty) List(Option.empty) else charms
} yield {
new Magic(spell, charm)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/326145.html
標籤:
上一篇:來自背景關系案例類的隱含值
