You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2023/01/01 17:45:00 UTC

[jira] [Created] (GROOVY-10893) collectEntries one or more entry values for each iteration but not zero

Eric Milles created GROOVY-10893:
------------------------------------

             Summary: collectEntries one or more entry values for each iteration but not zero
                 Key: GROOVY-10893
                 URL: https://issues.apache.org/jira/browse/GROOVY-10893
             Project: Groovy
          Issue Type: Bug
            Reporter: Eric Milles


The {{collectEntries}} extension methods accept one entry (as an entry, array, list or map).  And it accepts multiple entries (via a map).  However, it does not let you return no entry (as null).  You can probably return an empty map...

Similar to {{findResults}}, I'd like to be able to conditionally return an entry or entries:
{code:groovy}
def map = list.collectEntries { item ->
  if (item ...) {
    def key = ..., val = ...;
    Collections.singletonMap(key, val)
  }
}
{code}

{{org.codehaus.groovy.runtime.DefaultGroovyMethods#addEntry(Map,Object)}} could check for null before calling {{asType(newEntry, Map.Entry.class)}}.

{{collectMany}} has a similar issue.  I need to write "if (x) { y } else { Collections.emptyList() }" instead of just "if (x) { y }" in the closure block.  A simple null check in {{org.codehaus.groovy.runtime.DefaultGroovyMethods#collectMany(Iterable,Collection,Closure)` could take care of this.



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