如何根据Map <string,list <string >>的值(列表的元素)从其检索键?

时间:2019-03-08 13:10:59

标签: groovy

我有一张看起来像这样的地图:

def myMap = [
    'Key1': ['nameOfApp', 'nameOfApp2', 'nameOfApp3'],
    'Key5': ['nameOfApp4'],
    'Key2': ['nameOfApp5'],
    'Key3': ['xxx', 'yyy'],
    'Key4': ['aaa', 'vvv']
]

如何通过提供VALUE(这是一个简单的String值)来找到KEY?我已经尝试了很多事情,但是我对值是列表这一事实感到困惑...

作为示例,如果我提供nameOfApp2,我希望得到密钥Key1。用Groovy实现它的最简单方法是什么?

1 个答案:

答案 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空安全运算符来获取密钥的值,以防万一期望值不在任何列表中。