对于延迟评估,您可以将其转换为 all 到了 Stream 然后使用 partition 分开 all 基于给定的谓词进入流。在你的情况下,这将是这样的:
all
Stream
partition
all.toStream.partition(_ < samplingRate)
返回一个 Tuple 的 Stream 秒。
Tuple
(scala.collection.immutable.Stream[Int], scala.collection.immutable.Stream[Int])
你可能最好使用它 partition 的方法 SEQ :
// Partitions this sequence in two sequences according to a predicate. def partition(p: (A) ? Boolean): (Seq[A], Seq[A])
然后就可以了 all.partition(_ => r.nextDouble() < samplingRate) 只有一个RNG。
all.partition(_ => r.nextDouble() < samplingRate)