如何检查列表是否包含子列表(子列表...)或“根”中的键或值 并且有可能获得“路径”吗?
这个containsValue或containsKey似乎只是查看列表的根
伪示例:
//This is my list
list = [languages:[_clazz:"basics.i18n.Language", messages:[_clazz:"basics.i18n.Message"]]]
list.containsKey("languages") // return true
list.containsValue("basics.i18n.Language") // return false where I want true
list.containsKey("messages") // return false // return false where I want true
list.containsValue("basics.i18n.Message") // return false where I want true
答案 0 :(得分:5)
Groovy中没有任何内容我不会这么想,但你可以编写自己的内容并将其添加到Map
(你拥有的是Map
,而不是List
,因为您已将变量命名为
Map.metaClass.deepContainsKey = { value ->
delegate.containsKey(value) ?:
delegate.values().findAll { it instanceof Map }.findResult { it.deepContainsKey(value) } ?:
false
}
Map.metaClass.deepContainsValue = { value ->
delegate.containsValue(value) ?:
delegate.values().findAll { it instanceof Map }.findResult { it.deepContainsValue(value) } ?:
false
}
然后,给出你的地图:
def map = [languages:[_clazz:"basics.i18n.Language", messages:[_clazz:"basics.i18n.Message"]]]
所有这些断言都通过了:
assert map.deepContainsKey("messages")
assert map.deepContainsValue("basics.i18n.Message")
assert map.deepContainsValue("basics.i18n.Language")
assert !map.deepContainsKey("missing")
assert !map.deepContainsValue("novalue")