The inject()
method is since Groovy 1.8.1 also available for Map objects. The closure arguments accepts two or three arguments. With the three-argument variant we get the key and value separately as arguments. Otherwise we get a map entry as closure argument.
// 3-argument closure with key, value. def m = [user: 'mrhaki', likes: 'Groovy'] def sentence = m.inject('Message: ') { s, k, v -> s += "${k == 'likes' ? 'loves' : k} $v " } assert sentence.trim() == 'Message: user mrhaki loves Groovy' // 2-argument closure with entry. def map = [sort: 'name', order: 'desc'] def equalSizeKeyValue = map.inject([]) { list, entry -> list << (entry.key.size() == entry.value.size()) } assert equalSizeKeyValue == [true, false]