Since Groovy 1.7.6 we can use the min()
and max()
methods on a Map
. We use a closure to define the condition for a minimum or maximum value. If we use two parameters in the closure we must do a classic comparison. We return a negative value if the first parameters is less than the second, zero if they are both equal, or a positive value if the first parameter is greater than the second parameter. If we use a single parameter we can return a value that is used as Comparable
for determining the maximum or minimum entry in the Map
.
def money = [cents: 5, dime: 2, quarter: 3] // Determine max entry. assert money.max { it.value }.value == 5 assert money.max { it.key }.key == 'quarter' // Use String comparison for key. assert money.max { a, b -> a.key.size() <=> b.key.size() }.key == 'quarter' // Use Comparator and compare key size. // Determine min entry. assert money.min { it.value }.value == 2 assert money.min { it.key }.key == 'cents' // Use String comparison for key. assert money.min { a, b -> a.key.size() <=> b.key.size() }.key == 'dime' // Use Comparator and compare key size.