想知道是否有一种方法可以像发生器那样使用sql.eachRow
,以便在需要Collection或Iterator的DSL上下文中使用它。我尝试使用的用例是流式JSON生成 - 我试图做的是:
def generator = { sql.eachRow { yield it } }
jsonBuilder.root {
status "OK"
rows generator()
}
答案 0 :(得分:2)
您需要继续支持(或类似)才能在某种程度上发挥作用。 Groovy没有延续,JVM也没有。通常继续传递样式有效,但是然后每个方法都必须支持它,当然它不支持。因此,我看到的唯一方法是使用线程或类似的临时解决方案。所以也许这样的东西对你有用:
def sync = new java.util.concurrent.SynchronousQueue()
Thread.start { sql.eachRow { sync.put(it) } }
jsonBuilder.root {
status "OK"
rows sync.take()
}
我没有说明,这是一个很好的解决方案,只是一个随机的消费者 - 生产者 - 解决你的问题。