[ 
https://issues.apache.org/jira/browse/GROOVY-11958?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul King resolved GROOVY-11958.
--------------------------------
    Fix Version/s: 6.0.0-alpha-1
       Resolution: Fixed

> Add SGM#findGroups/findAllGroups
> --------------------------------
>
>                 Key: GROOVY-11958
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11958
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Paul King
>            Assignee: Paul King
>            Priority: Major
>             Fix For: 6.0.0-alpha-1
>
>
> *findGroups* (first match with capture groups)
> Closest existing Groovy idiom:
> {code:groovy}
> def m = "New York, NY 10292-0098" =~ /(\d{5})-(\d{4})/
> def (all, zip, plus4) = m ? m[0] : [null, null, null]
> {code}
> With findGroups:
> {code:groovy}
> def (all, zip, plus4) = "New York, NY 
> 10292-0098".findGroups(/(\d{5})-(\d{4})/)
> {code}
> findGroups returns an empty list on no match, and Groovy's multi-assign pads 
> missing elements with null, so the ternary/Elvis guard disappears.
> *findAllGroups* (all matches with capture groups)
> Closest existing Groovy idiom (findAll with a closure couples match 
> extraction and transformation):
> {code:groovy}
> def pairs = input.findAll(/Type=(\w+) Price=([\d.]+)/) { all, t, p -> "$t:$p" 
> }
> {code}
> With findAllGroups:
> {code:groovy}
> def pairs = input.findAllGroups(/Type=(\w+) Price=([\d.]+)/).collect { all, 
> t, p -> "$t:$p" }
> {code}
> For a one-shot collect the existing findAll-with-closure form is shorter. 
> findAllGroups pays off when you want the raw capture data first and then 
> filter, take, groupBy, or iterate over it separately — the match step and the 
> transform step are decoupled. eachMatch with a closure is the side-effect 
> equivalent; findAll with a closure is the value-returning equivalent that 
> findAllGroups most directly parallels.



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

Reply via email to