我有一个流正在读取这样的数据:
navigation.navigate('Linkscreen')
我需要读取第一行,在这种情况下,获取整数(5),然后对剩余的行进行计数,并找出(navigation('Linkscreen')
)计数是否匹配。在这种情况下5与4不匹配,因此它将为id | color | shade | 5
1 | red | light
2 | green | dark
3 | blue | light
4 | grey | light
。
我现在正在执行此操作,该操作可以在某些数据上正常工作,但开始出错,并在大型流(超过1M条记录)上给我OOM。这就是我在做的
true/false
问题
是否有一种方法可以提高上述代码的效率,使其适用于超过100万条记录?
答案 0 :(得分:0)
最有效的方法是不将restResult
收集为Seq[ColorLine]
,而是仅产生一些色线作为结果:
type Count = Long
val zeroCount : Count = 0L
val countColorLine : (Count, ColorLine) => Count =
(count, _) => count + 1
val restResultCount: Future[Count] =
myRawStr(ctx)
.drop(1)
.via(framing("\n"))
.map(_.utf8String)
.map(_.trim)
.map(s => ColorLineParser(s))
.collect {
case Right(color) => color
}
.runFold(zeroCount)(countColorLine)