Scala Stream处理

时间:2016-08-24 22:51:29

标签: scala

我使用流

在scala中编写了以下代码
def foo(x: Int) : Stream[Int] = {println("came inside"); (2 * x)} #:: foo(x + 1)
foo(1).takeWhile(_ < 6).toList.foreach(x => println(s"+++ $x"))

这适用于并产生以下输出

came inside
came inside
came inside
+++ 2
+++ 4

但我希望处理过程如

came inside
+++ 2
came inside
+++ 4
came inside

基本上我想逐个处理,直到&lt;的终止条件为止。符合6。我猜它是我的“tolist”方法,它首先创建一个巨大的列表,然后才处理它。

1 个答案:

答案 0 :(得分:1)

首先,以更易读的方式格式化代码。然后,删除set.seed(123) n <- 20 largedat <- data.frame(t1 = runif(n, 1, 10), x = 1:n, task = paste('series', 1:n)) largedat$t2 <- largedat$t1 + runif(n, 2, 5) highchart(hc_opts = list( chart = list(inverted = 'true') )) %>% hc_add_series_df(data = largedat, type = 'columnrange', group = task, x = x, low = t1, high = t2) %>% hc_legend(enabled = FALSE) # disable legend on this one :它所做的只是将整个流拉入单个变量。这样做会强制计算所有值。由于此时计算了每个值,我们知道&#39;内部&#39; printlns将在&#39; outside&#39;之前执行。那些。您希望将函数的定义(包括它的起始值)存储为延迟评估的值。这应该有效:

toList