В конечном счете, будет происходить некоторая итерация независимо от реализации. Groovy помогает нам написать это более выразительно. Здесь итерация выполняется с помощью find
:
List elements = new groovy.json.JsonSlurper().parseText('''{
"elements": [
{
"State": "AK",
"DayOfWeek": "Mon",
"StartTime": "0900",
"EndTime": "2200"
},
{
"State": "AK",
"DayOfWeek": "Tue",
"StartTime": "0900",
"EndTime": "2200"
},
{
"State": "AK",
"DayOfWeek": "Wed",
"StartTime": "0900",
"EndTime": "2200"
}]}''')."elements"
return elements.find { it."State" == "AK" && it."DayOfWeek" == "Tue" }."StartTime"
Поскольку вы пометили это как «упрощенный», предположительно, когда вы попросили что-то более эффективное, вы действительно имели в виду, что хотите писать меньше кода, поэтомувсе вышеперечисленное подходит.
Если производительность поиска была проблемой, потому что вы хотите выполнить много поисков, вы можете использовать Map для индексации элементов (один раз), и тогда получение данных становится вопросом поиска, а непоиск:
Map elementsByStateAndDay = elements.groupBy { [it."State", it."DayOfWeek"] }
return elementsByStateAndDay.get(["AK", "Tue"]).head()."StartTime"