[ 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)