【问题标题】:How to flatMap Scala collection and retain original value in the result?如何 flatMap Scala 集合并在结果中保留原始值?
【发布时间】:2021-02-05 15:23:21
【问题描述】:

考虑一个函数f : A -> Option[B]

我想使用f 进行平面映射,但在结果中也保留原始值,作为一对值(A,B)

我可以这样写:

collection.flatMap(a => {
  f(a) match {
    case Some(b) => Some((a,b))
    case None => None
  }
})

但是有更好的方法吗?

【问题讨论】:

    标签: scala


    【解决方案1】:

    这也有效。

    for {
      a <- collection
      b <- f(a)
    } yield (a,b)
    

    【讨论】:

    • 不错。比其他选项更清晰。
    • 注意:在这个答案中为理解而脱糖后,您会从 Jatin 的答案中获得代码。
    【解决方案2】:

    这个怎么样?

    collection.flatMap(a => f(a).map(b => (a,b)))
    

    【讨论】:

    • 或者只是a =&gt; f(a).map((a,_))
    • 当然!太明显了。这将我看起来凌乱的代码变成了简洁的单行代码。
    • 或者只是a =&gt; f(a).map(a -&gt; _)
    • @Suma Nice。使用 Scala 似乎总是有一种更简单的方法,尽管我不确定这是好事还是坏事!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2016-06-16
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多