Crankrune
Crankrune

Reputation: 15

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!

Upvotes: 1

Views: 996

Answers (1)

Prakash Thete
Prakash Thete

Reputation: 3892

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

Upvotes: 2

Related Questions