Как извлечь ключ из карты <String, List <String>> на основе его значения (элемента списка)? - PullRequest
2 голосов
/ 08 марта 2019

У меня есть карта, похожая на эту:

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

Как мне найти КЛЮЧ, указав ЗНАЧЕНИЕ (простое строковое значение)? Я перепробовал много вещей, но я заблокирован тем фактом, что значения являются списками ...

Например, если я предоставлю nameOfApp2, я ожидаю получить ключ Key1. Какой самый простой способ добиться этого с помощью Groovy?

1 Ответ

2 голосов
/ 08 марта 2019

Вы можете использовать метод 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 нулевой безопасный оператор для получения значения ключа, на случай, если ожидаемое значение отсутствует ни в одном списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...