+1

Cheers,
Daniel Sun

On 2022/12/19 11:23:19 Paul King wrote:
> 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.
> 

Reply via email to