gpt4 book ai didi

scala - flatMap 和 filter 的组合是什么?

转载 作者:行者123 更新时间:2023-12-01 12:25:36 24 4
gpt4 key购买 nike

在Scala 集合中,有一个collect 方法,它是map 和filter 的组合。

还有另一种方法是 flatMap 和 filter 的组合吗?

这是我想要做的

val myList: List[Int] = ....
val x = myList.flatMap { id =>
val r : Option[List[Int]] = obj.foo(id)
r
}

现在scala编译器告诉我x的类型是 List[List[Int]]
但我要 List[Int]
如果我将代码更改为
val myList: List[Int] = ....
val x = myList.flatMap { id =>
val r : Option[List[Int]] = obj.foo(id).get
r
}

然后我得到了我想要的。但我不想做得到。所以我想要一种干净简洁的方式来做一个 flatMap,同时过滤掉 None 的项目。

我也可以
val myList: List[Int] = ....
val result = myList.flatMap { id =>
val r : Option[List[Int]] = obj.foo(id).getOrElse(List[Int]())
r
}

但这仍然非常冗长。

最佳答案

好吧,如果您在使用 flatMap 时尝试过滤你可以轻松地做类似的事情

List(1, 2, 3).flatMap {
case n if n > 1 => List.fill(n)(n.toString)
case _ => Nil
}
// result: List("2", "2", "3", "3", "3")

在您的具体情况下:
myList.flatMap { id => obj.foo(id) match {
case Some(list) => list
case None => Nil
}}

或者更短
myList.flatMap(obj.foo(_).getOrElse(Nil))

关于scala - flatMap 和 filter 的组合是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com