dstarh Jak powiedział, chyba że szukasz nieniszczących metodą, która zwraca nową mapę ze swoimi indeksów zaludnionych, Rob Hruska jest odpowiedzią jest to, czego szukam.
dstarh Odpowiedź zawiera nieniszczącą wersję collectWithIndex
, ale obsługuje także rzeczywisty zbiór wyników.
Zazwyczaj najlepiej oddelegować takie ciężkie podnoszenie do obiektu odbierającego, aby grać ładnie z polimorficznymi implementacjami collect
, tj. W przypadku, gdy określona klasa implementuje collect
inaczej (niż tylko umieszczanie wyników w tablicy), mając collectWithIndex
Delegowanie do niego zapewni jednolite zachowanie. Oto jak kod będzie wyglądał:
@Category(List)
class Enumerator {
def enumerateCollecting(Closure closure) {
def index = 0
this.collect { closure.call(it, index++) }
}
}
use(Enumerator) {
['foo', 'bar', 'boo', 'baz'].collectWithIndex { e, i ->
[index: i, element: e]
}
}
Patrz this gist na przykład zarówno eachWithIndex
i collectWithIndex
.
Ponadto, podobnie jak komentarze do stanu zapytania, istnieją dwie kwestie Jira otwarty dla funkcji mamy described- GROOVY-2383 & GROOVY-3797
wygląda na to, że jest to cecha o http: //jira.codehaus.org/browse/GROOVY-2838 – dstarh
odpowiedział rzeczywistym rozwiązaniem poniżej – dstarh
Co nie miłość do mojego zbierania z indeksem :) – dstarh