Поскольку ваша итоговая карта в любом случае сохраняет только одно значение, вы также можете просто сделать это:
input.classes().findResult { it.name == 'Tom' ? [output: it.age] : null }
, где findResult вернет первый элемент в classes()
, для которогозакрытие:
{ it.name == 'Tom' ? [output: it.age] : null }
возвращает ненулевое значение.
Поскольку вы упомянули эффективность в своем вопросе: это более эффективно, чем проходить всю коллекцию с использованием collectEntries
или findAll
, поскольку findResult
возвращает непосредственно при поиске первого экземпляра it.name == 'Tom'
.
Какой путь действительно зависит от ваших требований.