[ 
https://issues.apache.org/jira/browse/GROOVY-11606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17942063#comment-17942063
 ] 

Paul King commented on GROOVY-11606:
------------------------------------

For the draft implementation, I have followed the Groovy-stream approach of 
setting the delegate.

It means we can have code like this \(*):

{code:groovy}
var letters = Iterators.iterate('a', String::next)
var numbers = Iterators.iterate(0, Integer::next)
assert Iterators.combineLazy(true, x:letters, y:numbers)
                .collectLazy{ x + y }    // <<<===== (*)
                .take(8)
                .join(' ') == 'a0 a1 b0 b1 a2 b2 c0 c1'
{code}

Instead of this:

{code:groovy}
var letters = Iterators.iterate('a', String::next)
var numbers = Iterators.iterate(0, Integer::next)
assert Iterators.combineLazy(true, x:letters, y:numbers)
                .map{ it.x + it.y }    // <<<===== (*)
                .take(8)
                .join(' ') == 'a0 a1 b0 b1 a2 b2 c0 c1'
{code}

Another example:
{code:groovy}
assert [
    [a:3, b:4, c:5],
    [a:5, b:12, c:13],
    [a:8, b:15, c:17],
    [a:7, b:24, c:25]
].iterator().collectLazy {
    c == Math.sqrt(a ** 2 + b ** 2)
}.join(' ') == 'true true true true'
{code}

An alternative using "with":

{code:groovy}
assert [
    [a:3, b:4, c:5],
    [a:5, b:12, c:13],
    [a:8, b:15, c:17],
    [a:7, b:24, c:25]
].iterator().map {
    it.with {
        c == Math.sqrt(a ** 2 + b ** 2)
    }
}.join(' ') == 'true true true true'
{code}
An example with "findAllLazy":
{code:groovy}
assert [
    [a:1, b:2, c:3],
    [a:5, b:15, c:10],
    [a:10, b:20, c:30]
].iterator().findAllLazy {
    a + b == c
}.join(' ') == '[a:1, b:2, c:3] [a:10, b:20, c:30]'
{code}
Using "filter":
{code:groovy}
assert [
    [a:1, b:2, c:3],
    [a:5, b:15, c:10],
    [a:10, b:20, c:30]
].iterator().filter {
    it.a + it.b == it.c
}.join(' ') == '[a:1, b:2, c:3] [a:10, b:20, c:30]'
{code}


> Lazy findAll, collect, collectMany
> ----------------------------------
>
>                 Key: GROOVY-11606
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11606
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Paul King
>            Assignee: Paul King
>            Priority: Major
>
> See:
> https://lists.apache.org/thread/xv1bpgc7xp3rwp7qt627xfyd10ljcwbc



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to