How do I add multiple Groovy map entries without overwriting the current entries

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

My question with Groovy Maps. I ve been searching for a way to programmatically add a new entry to a Groovy map without overwriting the current entry. For example

def editsMap = [:]

lineEdits.flag.each 
{ lineEdits_Flag ->
   editsMap.put( FlagId ,lineEdits_Flag.id)
   editsMap.put( FlagMnemonic ,lineEdits_Flag.mnemonic)
   editsMap.put( Action ,lineEdits_Flag.action)   
   println "editsMap: ${editsMap}"
}

The first pass produces this map:

   editsMap: [FlagId:10001, FlagMnemonic:TRA, Action:review]

But the second pass overwrites the first pass with:

   editsMap: [FlagId:10002, FlagMnemonic:REB, Action:deny]

What I m trying to do is create multiple entries within the one map. I need my map to populate something like this:

editsMap: [FlagId:10001, FlagMnemonic:TRA, Action:review]
editsMap: [FlagId:10002, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:10003, FlagMnemonic:UNB, Action:deny]
editsMap: [FlagId:20001, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:20002, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:30001, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:40001, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:40002, FlagMnemonic:MPR, Action:review]
editsMap: [FlagId:50001, FlagMnemonic:CPT, Action:deny]
editsMap: [FlagId:60001, FlagMnemonic:DTU, Action:deny]
editsMap: [FlagId:70001, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:70002, FlagMnemonic:MPR, Action:review]

Once I have populated my map then I need to be able to find certain values in order to process a message. I believe that I can use something like:

def thisValue = appliedEditsMap[FlagId,  10001 ] ?: "default"

to do a quick lookup.

Can someone help me understand how to programmatically add values to a Groovy map without overwriting the values already in the map?

Answers

http://tomjefferys.blogspot.com.br/2011/09/multimaps-google-guava.html http://tomjefferys.blogspot.com.br/2011/09/multimaps-google-guava.html

Multimap<String, String> myMultimap = ArrayListMultimap.create();

// Adding some key/value
myMultimap.put("Fruits", "Bannana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");

// Getting values
Collection<string> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear]

http://www.kellyrob99.com/blog/2010/05/15/achieving-groovy-like-fluency-in-java-with-google-collections/ http://www.kellyrob99.com/blog/2010/05/15/achieving-groovy-like-fluency-in-java-with-google-collections/

class GroovyMultimap {
    Map map = [:]

    public boolean put(Object key, Object value) {
        List list = map.get(key, [])
        list.add(value)
        map."$key" = list
    }
}

http://mrhaki.blogspot.com.br/2013/02/groovy-goodness-apply-mixin-to-object.html http://mrhaki.blogspot.com.br/2013/02/groovy-goodness-apply-mixin-to-object.html

He also uses Groovy with Guava s multimap:

List properties = [ value1 ,  value2 ,  value3 ]
Multimap multimap = list.inject(LinkedListMultimap.create()) {
    Multimap map, object ->
    properties.each {
        map.put(it, object."$it")
    }
    map
}
properties.each {
    assertEquals (multimap.get(it), list."$it")
}

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/15640525/how-do-i-add-multiple-groovy-map-entries-without-overwriting-the-current-entries

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils