使用Groovy中的字符串访问地图映射的元素

Arm*_*min 3 groovy map

鉴于我有一张地图:

def myMap = [ b : [ c:"X" ] ]
Run Code Online (Sandbox Code Playgroud)

还有一个字符串

def key = 'b.c'
Run Code Online (Sandbox Code Playgroud)

我想看看我使用密钥获取值'X'的选项.

我已经提出了两种方法来实现这一目标,但我对这些解决方案并不满意:

 1) Eval.me("theMap", myMap, "theMap.$key")
 2) mayMap."$key.split('\\.')[0]"."$key.split('\\.')[1]"
Run Code Online (Sandbox Code Playgroud)

任何人都有更好的方法在Groovy中这样做?

dma*_*tro 13

一种方便的方法是使用实现Map的ConfigObject.

def myMap = [b:[c:'X', d: 'Y'], a:[n:[m:[x:'Y']]]] as ConfigObject
def props = myMap.toProperties()

assert props['b.c'] == 'X'
assert props.'b.c' == 'X'
assert props.'a.n.m.x' == 'Y'
Run Code Online (Sandbox Code Playgroud)

优点:

  • 不再分裂.
  • 没有更多的评估.