groovy transform list into map using a groupBy max -


ok, rather simple thing not able figure out. have groovy list objects in like:

def listoftings = [   ["type": "a", "value": 1],   ["type": "b", "value": 3],   ["type": "a", "value": 2],   ["type": "b", "value": 2] ] 

and want map out of groupby(type) max(value):

["a": 2, "b": 3] 

but can not find groupby method , have not figured out using collectentries. there standard way achieve such result?

try following:

listoftings.groupby { it.type }.collectentries { [(it.key): it.value.max { it.value }.value] } 

first groupby create map of lists grouped type field:

[a:[[type:a, value:1], [type:a, value:2]], b:[[type:b, value:3], [type:b, value:2]]]

next, collectentries it.value.max { it.value } pick single entry maximum value field:

[a:[type:a, value:2], b:[type:b, value:3]]

picking value it.value.max { it.value }.value extract value field instead of whole entry:

[a:2, b:3]

hope helps :)


Comments

Popular posts from this blog

networking - Vagrant-provisioned VirtualBox VM is not reachable from Ubuntu host -

c# - ASP.NET Core - There is already an object named 'AspNetRoles' in the database -

ruby on rails - ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true -