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