Как сказал dstarh , если вы не ищете неразрушающий метод, который возвращает новую карту с заполненными индексами, Роб Хруска ответит то, что выищу.
dstarh ответ предоставляет вам неразрушающую версию collectWithIndex
, но обрабатывает фактический набор результатов тоже.
Я обычно нахожу еголучше всего делегировать такой тяжелый груз получающему объекту, чтобы хорошо играть с полиморфными реализациями collect
, т. е. в случае, если конкретный класс реализует collect
иначе (чем просто помещение результатов в массив), имея делегат collectWithIndex
это обеспечит равномерное поведение.Вот как будет выглядеть код:
@Category(List)
class Enumerator {
def collectWithIndex(Closure closure) {
def index = 0
this.collect { closure.call(it, index++) }
}
}
use(Enumerator) {
['foo', 'bar', 'boo', 'baz'].collectWithIndex { e, i ->
[index: i, element: e]
}
}
Обратитесь к этой сущности за примером для eachWithIndex
и collectWithIndex
.
Также как и комментариик состоянию вашего вопроса, есть две проблемы Jira, открытые для функции, которую мы описали - GROOVY-2383 & GROOVY-3797