I created https://issues.apache.org/jira/browse/GROOVY-10879 to track this issue. It points to the current proposed PR.
Currently I am proposing a few additional overloads and a few additional specific methods. I think this gives a good balance between improved typing information and succinct representation of the various cases. Cheers, Paul. On Tue, Dec 20, 2022 at 6:20 PM Mario Garcia <mario.g...@gmail.com> wrote: > +1. > > Hi all. For me it makes more sense to have a specific method for that > (collectEntriesWith, collectEntriesWithKey...) than overloading > collectEntries and forcing me to introduce the java.util.function api just > for so little. > > El lun, 19 dic 2022 a las 12:23, Paul King (<pa...@asert.com.au>) > escribió: > >> >> Hi folks, >> >> @mrhaki who many of you may know as the author of "Groovy Goodness" also >> covers other topics and recently covered Kotlin's associate method: >> >> >> https://blog.jdriven.com/2022/12/kotlin-kandy-transform-items-in-a-collection-to-a-map-with-associate/ >> >> Groovy addresses this use case fairly well using collectEntries, e.g.: >> >> var languages = ['Kotlin', 'Groovy', 'Java', 'Clojure'] >> assert languages.collectEntries{ [it.toLowerCase(), it.size()] } == >> [kotlin:6, groovy:6, java:4, clojure:7] >> assert languages.collectEntries{ [it.toLowerCase(), it] } == >> [kotlin:'Kotlin', groovy:'Groovy', java:'Java', clojure:'Clojure'] >> assert languages.collectEntries(Scala:5){ [it, it.size()] } == >> [Scala:5, Kotlin:6, Groovy:6, Java:4, Clojure:7] >> >> But we don't have exact equivalents to associateWith and associateBy. The >> collectEntries variants handle all the cases but there is some simplicity >> that would come with additional equivalent variants, e.g.: >> >> // "collectEntriesWith" could be just "collectEntries" if we want >> assert languages.collectEntriesWith(String::toLowerCase, String::size) == >> [kotlin:6, groovy:6, java:4, clojure:7] >> // equivalent of associateBy >> assert languages.collectEntriesWithKey(String::toLowerCase) == >> [kotlin:'Kotlin', groovy:'Groovy', java:'Java', clojure:'Clojure'] >> // equivalent of associateWith >> assert languages.collectEntriesWithValue(String::size) == >> [Kotlin:6, Groovy:6, Java:4, Clojure:7] >> >> The method names are just suggestions at this point. >> >> Thoughts? >> >> Cheers, Paul. >> >> >> >>