java—如何在groovy中使用字符串插值从带有点表示法的嵌套Map的属性中获取值

sxissh06  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(264)

我从参数中收到一个以点表示的字符串,例如“attr1.attr2.attr3”。我有一个数据类型为linkedhashmap<string,object>mapobject的对象。它有一个可以通过以下方式访问的值: mapObject.attr1.attr2.attr3 . 当我尝试以这种方式访问字段时: mapObject."${attr1.attr2.attr3} ,我收到一个missingpropertyexception,groovy将其转换为字符串: mapObject."attr1.attr2.attr3" 很明显,这个属性并不存在。我用eval.java类eval.x()方法解决了这个问题: Eval.x(mapObject,"x.${attr1.attr2.attr3}") 但这对蜗牛来说也太慢了。有没有一种方法,我可以得到一个嵌套属性的值的Map只知道点符号的路径?
这是我的密码 def superCoolMethod(String dotNotatedPath, LinkedHashMap<String, Object> MapObject){ def valueINeedToGetFromTheMapObject = MapObject."${dotNotatedPath}" // Other stuff unimportant for this question. `

pkmbmrz7

pkmbmrz71#

你可以在上面分开这条路 . (在regexp中引用它),然后使用数据在路径上进行缩减。例如

def data = [a: [b: [c: 42]]]
def path = "a.b.c"

println path.split(/\./).inject(data){ m, p -> m?.getAt(p) }
// → 42

相关问题