2016-05-02 5 views
1

У меня есть карта, как так:Получить ключ от карты карты

[One:[example:value1, example2:value2] ,Two[example 1:value3, example2:value4]] 

Я имею сопрягая value1 из значения в другой карте, но мне нужно, чтобы получить ключи, либо один или два в зависимости если это совпадение.

Так что, если я говорю:

if(value1.equals (otherMapValue)) 
    Return One 

Эта карта от ответа JSon поэтому, если есть лучший способ сделать это, кроме карты я могу изменить его. Извините за форматирование я использую мой телефон

+0

Что является входом? Вы получаете что-то вроде 'value1', и вам нужно найти ключи? – Will

+0

Value1 будет соответствовать значению с другой карты, и у меня есть несколько закрытий, чтобы проверить, соответствуют ли они тем, что они делают, поэтому мне нужно получить ключ значения, но не example1 Мне нужен «главный ключ», который будет One. .не уверен, что это возможно честно .. приведенная выше карта - ответ json, а другая карта - карта конфигурации. –

+0

@naffy_naffy показать весь ваш код – Vampire

ответ

1

Это должно сделать:

def someMethod(valueFromOthermap) { 
    def map = [ 
     One: [example1: 'value1', example2:'value2'], 
     Two: [example1: 'value3', example2:'value4'] 
    ] 

    map.findResults { k, v -> 
     valueFromOthermap in v.values() ? k : null 
    } 
} 

assert someMethod('value1') == ['One'] 

Если вы ищете первый ключ согласования вместо списка ключей, а затем использовать findResult вместо findResults, всего остального остается неизменной.

ОБНОВЛЕНИЕ:
Относительно JSON к Map синтаксического анализа, A JSON resonse может быть легко разобран до Map, как показано ниже:

Map responseMap = new groovy.json.JsonSlurper().parseText(jsonResponseString) 
Смежные вопросы