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

Paul King updated GROOVY-12054:
-------------------------------
    Description: 
h2. Overview

Continues the "fat-free lambda" work from GROOVY-12034 by adding 
{{java.util.function}}\-typed overloads to the most-used higher-order DGM 
methods. Pairs with the {{org.apache.groovy.util.Lambdas}} / {{Closures}} 
{{curryWith}} helpers landed under GROOVY-12043 — callers can pass 
{{Predicate}}/{{Function}}/{{Consumer}} (and the Bi-* / ObjInt-* SAMs where 
shape demands) directly without {{Closure}} wrapping, and compose with 
{{Lambdas.curryWith(...)}} for the right-curry pattern that motivated 
GROOVY-12034.

h2. Scope

Prime candidates for direct use or use in combination with {{curryWith}}:

* {{each(Iterable<T>, Consumer<? super T>)}} -> {{Iterable<T>}}
* {{findAll(Iterable<T>, Predicate<? super T>)}} -> {{List<T>}}
* {{find(Iterable<T>, Predicate<? super T>)}} -> {{T}}
* {{any(Iterable<T>, Predicate<? super T>)}} -> {{boolean}}
* {{every(Iterable<T>, Predicate<? super T>)}} -> {{boolean}}
* {{inject(Iterable<T>, BinaryOperator<T>)}} -> {{T}} (unseeded)
* {{inject(Iterable<E>, U initial, BiFunction<U, ? super E, U>)}} -> {{U}} 
(seeded)
* {{collect(Iterable<E>, C collector, Function<? super E, ? extends T>)}} -> 
{{C}} (collector variant; the basic form {{collect(Iterable<E>, Function)}} 
already landed under GROOVY-12034)
* {{groupBy(Iterable<T>, Function<? super T, ? extends K>)}} -> {{Map<K, 
List<T>>}}
* {{eachWithIndex(Iterable<T>, ObjIntConsumer<? super T>)}} -> {{Iterable<T>}} 
(uses {{ObjIntConsumer}} to avoid per-element {{Integer}} autoboxing)
* {{collectEntries(Iterable<E>, Function<? super E, ? extends Map.Entry<K, 
V>>)}} -> {{Map<K, V>}} (single-function form; the two-function form already 
exists)
* {{collect(Map<K, V>, BiFunction<? super K, ? super V, ? extends T>)}} -> 
{{List<T>}}
* {{findAll(Map<K, V>, BiPredicate<? super K, ? super V>)}} -> {{Map<K, V>}}
* {{collect(Iterator<E>, Function<? super E, ? extends T>)}} -> {{List<T>}}
* {{findAll(Iterator<T>, Predicate<? super T>)}} -> {{List<T>}} — new; the 
existing {{Closure}} family has no {{findAll(Iterator, Closure)}}, so this is a 
fat-free-only addition for symmetry with {{collect(Iterator, Function)}}
* {{findAll(Set<T>, Predicate<? super T>)}} -> {{Set<T>}} — the one method 
where preserving the {{Set}} self-type matters for downstream membership 
semantics

Total: ~16 new overloads.

Prime candidates for explicit "With" style methods:

* {{findAll(Iterable, BiPredicate<? super T, ? super P>, P)}} -> {{List}}
* {{collect(Iterable, BiFunction<? super E, ? super P, ? extends R>, P)}} -> 
{{List}}

Total: 2 new overloads.



  was:
h2. Overview

Continues the "fat-free lambda" work from GROOVY-12034 by adding 
{{java.util.function}}\-typed overloads to the most-used higher-order DGM 
methods. Pairs with the {{org.apache.groovy.util.Lambdas}} / {{Closures}} 
{{curryWith}} helpers landed under GROOVY-12043 — callers can pass 
{{Predicate}}/{{Function}}/{{Consumer}} (and the Bi-* / ObjInt-* SAMs where 
shape demands) directly without {{Closure}} wrapping, and compose with 
{{Lambdas.curryWith(...)}} for the right-curry pattern that motivated 
GROOVY-12034.

h2. Scope

Prime candidates for direct use or use in combination with {{curryWith}}:

* {{each(Iterable<T>, Consumer<? super T>)}} -> {{Iterable<T>}}
* {{findAll(Iterable<T>, Predicate<? super T>)}} -> {{List<T>}}
* {{find(Iterable<T>, Predicate<? super T>)}} -> {{T}}
* {{any(Iterable<T>, Predicate<? super T>)}} -> {{boolean}}
* {{every(Iterable<T>, Predicate<? super T>)}} -> {{boolean}}
* {{inject(Iterable<T>, BinaryOperator<T>)}} -> {{T}} (unseeded)
* {{inject(Iterable<E>, U initial, BiFunction<U, ? super E, U>)}} -> {{U}} 
(seeded)
* {{collect(Iterable<E>, C collector, Function<? super E, ? extends T>)}} -> 
{{C}} (collector variant; the basic form {{collect(Iterable<E>, Function)}} 
already landed under GROOVY-12034)
* {{groupBy(Iterable<T>, Function<? super T, ? extends K>)}} -> {{Map<K, 
List<T>>}}
* {{eachWithIndex(Iterable<T>, ObjIntConsumer<? super T>)}} -> {{Iterable<T>}} 
(uses {{ObjIntConsumer}} to avoid per-element {{Integer}} autoboxing)
* {{collectEntries(Iterable<E>, Function<? super E, ? extends Map.Entry<K, 
V>>)}} -> {{Map<K, V>}} (single-function form; the two-function form already 
exists)
* {{collect(Map<K, V>, BiFunction<? super K, ? super V, ? extends T>)}} -> 
{{List<T>}}
* {{findAll(Map<K, V>, BiPredicate<? super K, ? super V>)}} -> {{Map<K, V>}}
* {{collect(Iterator<E>, Function<? super E, ? extends T>)}} -> {{List<T>}}
* {{findAll(Iterator<T>, Predicate<? super T>)}} -> {{List<T>}} — new; the 
existing {{Closure}} family has no {{findAll(Iterator, Closure)}}, so this is a 
fat-free-only addition for symmetry with {{collect(Iterator, Function)}}
* {{findAll(Set<T>, Predicate<? super T>)}} -> {{Set<T>}} — the one method 
where preserving the {{Set}} self-type matters for downstream membership 
semantics

Total: ~16 new overloads.

Prime candidates for explicit "With" style methods:

* {{findAllWith(Iterable, BiPredicate<? super T, ? super P>, P)}} -> {{List}}
* {{collectWith(Iterable, BiFunction<? super E, ? super P, ? extends R>, P)}} 
-> {{List}}

Total: 2 new overloads.




> A preliminary set of "fat-free" DGM methods
> -------------------------------------------
>
>                 Key: GROOVY-12054
>                 URL: https://issues.apache.org/jira/browse/GROOVY-12054
>             Project: Groovy
>          Issue Type: Sub-task
>            Reporter: Paul King
>            Assignee: Paul King
>            Priority: Major
>
> h2. Overview
> Continues the "fat-free lambda" work from GROOVY-12034 by adding 
> {{java.util.function}}\-typed overloads to the most-used higher-order DGM 
> methods. Pairs with the {{org.apache.groovy.util.Lambdas}} / {{Closures}} 
> {{curryWith}} helpers landed under GROOVY-12043 — callers can pass 
> {{Predicate}}/{{Function}}/{{Consumer}} (and the Bi-* / ObjInt-* SAMs where 
> shape demands) directly without {{Closure}} wrapping, and compose with 
> {{Lambdas.curryWith(...)}} for the right-curry pattern that motivated 
> GROOVY-12034.
> h2. Scope
> Prime candidates for direct use or use in combination with {{curryWith}}:
> * {{each(Iterable<T>, Consumer<? super T>)}} -> {{Iterable<T>}}
> * {{findAll(Iterable<T>, Predicate<? super T>)}} -> {{List<T>}}
> * {{find(Iterable<T>, Predicate<? super T>)}} -> {{T}}
> * {{any(Iterable<T>, Predicate<? super T>)}} -> {{boolean}}
> * {{every(Iterable<T>, Predicate<? super T>)}} -> {{boolean}}
> * {{inject(Iterable<T>, BinaryOperator<T>)}} -> {{T}} (unseeded)
> * {{inject(Iterable<E>, U initial, BiFunction<U, ? super E, U>)}} -> {{U}} 
> (seeded)
> * {{collect(Iterable<E>, C collector, Function<? super E, ? extends T>)}} -> 
> {{C}} (collector variant; the basic form {{collect(Iterable<E>, Function)}} 
> already landed under GROOVY-12034)
> * {{groupBy(Iterable<T>, Function<? super T, ? extends K>)}} -> {{Map<K, 
> List<T>>}}
> * {{eachWithIndex(Iterable<T>, ObjIntConsumer<? super T>)}} -> 
> {{Iterable<T>}} (uses {{ObjIntConsumer}} to avoid per-element {{Integer}} 
> autoboxing)
> * {{collectEntries(Iterable<E>, Function<? super E, ? extends Map.Entry<K, 
> V>>)}} -> {{Map<K, V>}} (single-function form; the two-function form already 
> exists)
> * {{collect(Map<K, V>, BiFunction<? super K, ? super V, ? extends T>)}} -> 
> {{List<T>}}
> * {{findAll(Map<K, V>, BiPredicate<? super K, ? super V>)}} -> {{Map<K, V>}}
> * {{collect(Iterator<E>, Function<? super E, ? extends T>)}} -> {{List<T>}}
> * {{findAll(Iterator<T>, Predicate<? super T>)}} -> {{List<T>}} — new; the 
> existing {{Closure}} family has no {{findAll(Iterator, Closure)}}, so this is 
> a fat-free-only addition for symmetry with {{collect(Iterator, Function)}}
> * {{findAll(Set<T>, Predicate<? super T>)}} -> {{Set<T>}} — the one method 
> where preserving the {{Set}} self-type matters for downstream membership 
> semantics
> Total: ~16 new overloads.
> Prime candidates for explicit "With" style methods:
> * {{findAll(Iterable, BiPredicate<? super T, ? super P>, P)}} -> {{List}}
> * {{collect(Iterable, BiFunction<? super E, ? super P, ? extends R>, P)}} -> 
> {{List}}
> Total: 2 new overloads.



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

Reply via email to