我想从LinkedHashmap获取具有如下动态键的值。

def map = [Employee1: [Status: 'Working', Id: 1], Employee2:  [Status: 'Resigned', Id: 2]]

def keys = "Employee1.Status"
def keyPath = "";
def keyList = keys.tokenize(".");


keyList.eachWithIndex() { key, i ->

    keyPath += "$key"

    if(i != keyList.size() - 1){   keyPath += "."     }
}

println keyPath //Employee1.Status
println map.keyPath //Always null
println map.'Employee1'.'Status' //Working
println map.Employee1.Status //Working


在这里map.keyPath总是返回null。如何通过动态键获取值?

最佳答案

我认为您可以简单地做到这一点:

def tmpMap = map;
keyList.subList(0, keyList.size - 1).each {key ->
   tmpMap = map[key]
}
println tmpMap[keyList[keyList.size - 1]]


这将提取子图,直到达到实际值键为止。为了使它更加稳定,您应该添加一些逻辑以检查与当前键关联的值是否实际上是映射。

08-05 14:08