在 Scala 中,如何将 FilterMonadic 转换为列表?
In Scala, how to convert FilterMonadic to a List?
我从以下行得到了 FilterMonadic
:
val f = ((2 to 10) withFilter (_ > 5) withFilter( _ < 8))
但是,我发现 f
没有 toList
方法。有没有人知道如何将其转换为列表?
withFilter
和 filter
方法的主要区别是什么?
您可以使用 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
,然后将结果转换为 List
:f.map(identity).toList
.
至于区别,对于大多数集合filter
立即执行过滤,在内存中建立一个新的集合并returns,而withFilter
returns一个对象,它存储原始集合并仅在请求元素时进行过滤。
我从以下行得到了 FilterMonadic
:
val f = ((2 to 10) withFilter (_ > 5) withFilter( _ < 8))
但是,我发现 f
没有 toList
方法。有没有人知道如何将其转换为列表?
withFilter
和 filter
方法的主要区别是什么?
您可以使用 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
,然后将结果转换为 List
:f.map(identity).toList
.
至于区别,对于大多数集合filter
立即执行过滤,在内存中建立一个新的集合并returns,而withFilter
returns一个对象,它存储原始集合并仅在请求元素时进行过滤。