Paul King created GROOVY-12215:
----------------------------------

             Summary: Fat-free variants for collectMany, countBy, split, 
take/dropWhile, groupBy
                 Key: GROOVY-12215
                 URL: https://issues.apache.org/jira/browse/GROOVY-12215
             Project: Groovy
          Issue Type: Improvement
            Reporter: Paul King
            Assignee: Paul King


h3. Summary

Sub-task of GROOVY-12205. Adds the straightforward "fat-free" 
functional-interface twins — a single {{java.util.function}} overload beside 
each existing {{Closure}} overload — for the mapping/filtering DGM methods that 
currently have none. These are mechanical, following the conventions 
established in GROOVY-12054; no design decisions are involved.

h3. Methods

||Method||Closure overloads without a twin||Functional type||Receivers||
|{{collectMany}}|8|{{Function<? super E, ? extends Collection<? extends 
T>>}}|Iterable (x2), Map (x2), Iterator (x2), {{E[]}} (x2)|
|{{collectingMany}}|1|{{Function}} (lazy)|Iterator|
|{{countBy}}|4|{{Function<? super E, ? extends K>}}|Iterable, Iterator, Map, 
{{E[]}}|
|{{split}}|5|{{Predicate<? super T>}}|Object, Collection, List, Set, {{T[]}}|
|{{groupBy}} (single-key)|2|{{Function<? super T, ? extends K>}}|Map, 
{{Object[]}} (the Iterable twin already exists)|
|{{takeWhile}}|6|{{Predicate<? super T>}}|List, Iterable, SortedSet, Map, 
Iterator, {{T[]}}|
|{{dropWhile}}|6|{{Predicate<? super T>}}|SortedSet, List, Iterable, Map, 
Iterator, {{T[]}}|

Total: 32 new overloads.

h3. Conventions (per GROOVY-12054)

* PECS wildcards on the functional parameter; {{@since 6.0.0}}.
* Inline javadoc example using {{<pre class="language-groovy 
groovyTestCase">}}, cross-linking the {{Closure}} counterpart via {{@link}}.
* Plain single-SAM overloads only — *not* {{@Incubating}}; that annotation is 
reserved for the curried {{(BiXxx, param)}} forms, which are a separate item.

h3. Exclusions

* {{groupBy}} multi-key forms ({{Object...}} / {{List<Closure>}}) — no clean 
functional analogue.
* {{takeWhile}}/{{dropWhile}} on {{CharSequence}}/{{GString}} (the SGM 
char-by-char forms) — a String-domain {{Predicate<Character>}}/{{IntPredicate}} 
decision, out of scope for this collection-focused sub-task (keeps the count at 
6 each).

h3. Compatibility

Existing closure/lambda call sites are unaffected: a {{Closure}} literal binds 
to the {{Closure}} overload, while method references and typed functional 
values select the twin under {{@CompileStatic}} (per GROOVY-12214). Only check: 
an existing {{@CompileStatic}} call passing a literal {{null}} to one of these 
currently-single-overload methods would become ambiguous — a rare, 
grep-checkable case, resolved with a cast if found.




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

Reply via email to