Crankrune Crankrune - 2 months ago 13
Groovy Question

Groovy: Use range as key in map?

I'm still kinda new to Groovy, just used it in a program called FileBot. Anyway, to sort some things well, without writing 10,000 lines of code, I want to be able use a range as the key in a map. So basically what I want to do is if 'a' is between '1' and '10' return 'x' value. I know I could write it out as

{a >= 1 && <=10 ? 'Do This' : null}
but that would be a lot more writing to do that. Also, I obviously want to use this for multiple different ranges, or this wouldn't be an issue.

Similarly, if there is any easier way to do this, I thought maybe with a csv file, but I'm not sure how exactly.

Any help is much appreciated!

Answer

Approach 1: As You asked

You can create the map with ranges pretty easily

Assuming you have map like below with ranges as key

Map sampleMap = [:]

sampleMap << [(1..10): "In one ten", (20..30): "In twenty thirty"]

Then you can easily find if your element is present in your map range or not like below

def found = sampleMap.find { entry -> entry.key.contains(2) }
println "found : " + found.value

output :

found : In one ten

Approach 2 :

Well you can also take advantage of the groovy switch case like below

def age = 5
switch(age){

    case 1..10 : 
        //do your work
        println "In one ten"
        break

    case 21..50 : 
        //do your work
        println "In twenty fifty"
        break

    case 51..65 :    
        //do your work
        println "In fifty sixty"
        break

    default: 
        //if nothing matches do something here
        break
}

Output :

In one ten
Comments