我有一张看起来像这样的地图:
def myMap = [
'Key1': ['nameOfApp', 'nameOfApp2', 'nameOfApp3'],
'Key5': ['nameOfApp4'],
'Key2': ['nameOfApp5'],
'Key3': ['xxx', 'yyy'],
'Key4': ['aaa', 'vvv']
]
如何通过提供VALUE(这是一个简单的String值)来找到KEY?我已经尝试了很多事情,但是我对值是列表这一事实感到困惑...
作为示例,如果我提供nameOfApp2
,我希望得到密钥Key1
。用Groovy实现它的最简单方法是什么?
答案 0 :(得分:2)
您可以将find
方法与诸如expectedValue in it.value
之类的谓词一起使用。检查以下示例:
def myMap = [
'Key1': ['nameOfApp', 'nameOfApp2', 'nameOfApp3'],
'Key5': ['nameOfApp4'],
'Key2': ['nameOfApp5'],
'Key3': ['xxx', 'yyy'],
'Key4': ['aaa', 'vvv']
]
def expectedValue = 'nameOfApp2'
def key = myMap.find { expectedValue in it.value }?.key
assert key == 'Key1'
谓词闭包内的变量it
代表输入映射中的每个Map.Entry<String. List<String>>
,因此您可以检查期望值是否是it.value
列表的一部分。最后一部分使用?.key
空安全运算符来获取密钥的值,以防万一期望值不在任何列表中。