将键作为字符串映射并将值作为列表在Groovy中映射

Sri*_*aul 38 groovy map

任何人都可以向我指出一个如何Map在Groovy中使用a的一个例子,它有一个Stringas键和一个List值?

Mic*_*ter 53

Groovy几乎接受所有Java语法,因此有一系列选择,如下所示:

// Java syntax 

Map<String,List> map1  = new HashMap<>();
List list1 = new ArrayList();
list1.add("hello");
map1.put("abc", list1); 
assert map1.get("abc") == list1;

// slightly less Java-esque

def map2  = new HashMap<String,List>()
def list2 = new ArrayList()
list2.add("hello")
map2.put("abc", list2)
assert map2.get("abc") == list2

// typical Groovy

def map3  = [:]
def list3 = []
list3 << "hello"
map3.'abc'= list3
assert map3.'abc' == list3
Run Code Online (Sandbox Code Playgroud)


AA.*_*AA. 20

def map = [:]
map["stringKey"] = [1, 2, 3, 4]
map["anotherKey"] = [55, 66, 77]

assert map["anotherKey"] == [55, 66, 77] 
Run Code Online (Sandbox Code Playgroud)

  • 另外:`map.stringKey = [1,2,3,4]; map.anotherKey = [55,66,77]` (6认同)

Jos*_*eph 11

在处理地图/列表作为地图中的值时有用的另一个小部分是withDefault(Closure)groovy中地图上的方法.而不是执行以下代码:

Map m = [:]
for(object in listOfObjects)
{
  if(m.containsKey(object.myKey))
  {
    m.get(object.myKey).add(object.myValue)
  }
  else
  {
    m.put(object.myKey, [object.myValue]
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以执行以下操作:

Map m = [:].withDefault{key -> return []}
for(object in listOfObjects)
{
  List valueList = m.get(object.myKey)
  m.put(object.myKey, valueList)
}
Run Code Online (Sandbox Code Playgroud)

默认也可用于其他事情,但我发现这是我最常见的用例.

API:http: //www.groovy-lang.org/gdk.html

Map - > withDefault(Closure)


Aru*_*ngh 8

你不需要声明Map groovy在内部识别它

def personDetails = [firstName:'John', lastName:'Doe', fullName:'John Doe']

// print the values..
    println "First Name: ${personDetails.firstName}"
    println "Last Name: ${personDetails.lastName}"
Run Code Online (Sandbox Code Playgroud)

http://grails.asia/groovy-map-tutorial


Joh*_*ick 5

约瑟夫忘记在他的示例中添加值withDefault。这是我最终使用的代码:

Map map = [:].withDefault { key -> return [] }
listOfObjects.each { map.get(it.myKey).add(it.myValue) }
Run Code Online (Sandbox Code Playgroud)