Scala for-yield实现两个集合类Left Join操作,兼容空集合场景
可以,仅需对charms做一层可选包装即可,写法和原代码几乎一致:
def hocusPocus(spells: Seq[String], charms: Seq[String]): Seq[Magic] = { for { spell <- spells charmOpt <- if (charms.isEmpty) Seq(None) else charms.map(Some(_)) } yield new Magic(spell, charmOpt) }
逻辑说明:
- 非空场景下和你原有代码行为完全一致,生成
spells和charms笛卡尔积对应的Magic实例,第二个参数为Some包装的charm值 - 当
charms为空时,我们提供了仅包含单个None的序列用于配对,每个spell都会对应生成一个Magic实例,第二个参数为None,符合需求。
内容的提问来源于stack exchange,提问作者Denys Kurochkin
相关产品推荐
相关产品推荐

