在 Scala 中,如何将 FilterMonadic 转换为列表?

In Scala, how to convert FilterMonadic to a List?

我从以下行得到了 FilterMonadic

val f = ((2 to 10) withFilter (_ > 5) withFilter( _ < 8))

但是,我发现 f 没有 toList 方法。有没有人知道如何将其转换为列表?

withFilterfilter 方法的主要区别是什么?

您可以使用 flatMap:

scala> val f = ((2 to 10) withFilter (_ > 5) withFilter( _ < 8))
f: scala.collection.generic.FilterMonadic[Int,scala.collection.immutable.IndexedSeq[Int]] = scala.collection.TraversableLike$WithFilter@60b8da0

scala> f.flatMap(List(_)).toList
res0: List[Int] = List(6, 7)

最简单的方法大概是f.map(identity),不一定是return一个List,而是一个合适的序列类型,根据过滤前的原始序列类型。

如果您只想要一个 List,然后将结果转换为 Listf.map(identity).toList.

至于区别,对于大多数集合filter立即执行过滤,在内存中建立一个新的集合并returns,而withFilter returns一个对象,它存储原始集合并仅在请求元素时进行过滤。