如何检查列表是否包含Groovy中另一个列表中的值或键?

Das*_*sma 0 groovy

如何检查列表是否包含子列表(子列表...)或"根"中的键或值,是否可以获得"路径"?

这个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
Run Code Online (Sandbox Code Playgroud)

tim*_*tes 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
}
Run Code Online (Sandbox Code Playgroud)

那么,给你的地图:

def map = [languages:[_clazz:"basics.i18n.Language", messages:[_clazz:"basics.i18n.Message"]]] 
Run Code Online (Sandbox Code Playgroud)

所有这些断言都通过了:

assert map.deepContainsKey("messages") 
assert map.deepContainsValue("basics.i18n.Message")
assert map.deepContainsValue("basics.i18n.Language")

assert !map.deepContainsKey("missing") 
assert !map.deepContainsValue("novalue")
Run Code Online (Sandbox Code Playgroud)