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

Paul King commented on GROOVY-11146:
------------------------------------

Thinking about it a bit more, just adding a couple of {{flatten}} variants 
seems to get close to what I was after with no impact on existing functionality 
and minimal additions:

https://github.com/apache/groovy/pull/1926

The above example would now be catered for by either of these:

{code}
items.flatten(true, toInt3)
items.collect(toInt3).flatten(true)
{code}

I think it would be cleaner to default the flattenOptionals boolean to true 
since I think that is what many folks might expect, but I went with the flag 
flipped for backwards compatibility. Any thoughts?


> Consider supporting flattening of Optionals in flatten/collectMany
> ------------------------------------------------------------------
>
>                 Key: GROOVY-11146
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11146
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Paul King
>            Assignee: Paul King
>            Priority: Major
>
> The functional idiom of map/collect then flatten is so common that we 
> normally have a shorthand for combining them: flatMap, bind, collectMany.
> We have that for streams (piggybacking on Java) and collections but not 
> optionals.
> {code}
> var items = ["1", "2", "foo", "3", "bar"]
> var toInt1 = s -> s.number ? Stream.of(s.toInteger()) : Stream.empty()
> println items.stream().flatMap(toInt1).toList()
> var toInt2 = s -> s.number ? [s.toInteger()] : []
> println items.collectMany(toInt2)
> var toInt3 = s -> s.number ? Optional.of(s.toInteger()) : Optional.empty()
> println items.collect(toInt3).flatten{ it -> it.orElse([]) }
> println items.collect(toInt3).findResults{ it -> it.orElse(null) }
> println items.collect(toInt3).grep()*.get()
> {code}
> This issue will explore options for adding that.



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

Reply via email to