.recueillir avec un index
Est-il un .collect
avec un indice? Je veux faire quelque chose comme ceci:
def myList = [
[position: 0, name: 'Bob'],
[position: 0, name: 'John'],
[position: 0, name: 'Alex'],
]
myList.collect { index ->
it.position = index
}
(ie. Je veux mettre position
à une valeur qui indique l'ordre dans la liste)
- on dirait que c'est une demande de fonctionnalité jira.codehaus.org/browse/GROOVY-2838
- répondu avec une solution réelle ci-dessous
- Ce pas de l'amour pour ma recueillir avec index 🙂
- il est assez cool (juste upvoted il), j'ai juste fini à l'aide de rob suggestion (je n'ai pas besoin d'une collection retournée). je vais utiliser votre truc bas de la piste pour vous!
Vous devez vous connecter pour publier un commentaire.
Depuis Groovy 2.4.0 il y a un
withIndex()
méthode qui est ajouté àjava.lang.Iterable
.Donc, dans une fonctionnelle de la mode (aucun effet secondaire, immuable), il semble que
Légèrement groovier version de collectWithIndex:
ou même
eachWithIndex
serait probablement mieux travailler:À l'aide d'un
collectX
ne semble pas vraiment nécessaire puisque vous êtes tout simplement la modification de la collecte et de ne pas retourner les pièces de celui-ci dans une nouvelle collection.Ceci devrait faire exactement ce que vous voulez
Sans ajout de toutes les méthodes d'extension, vous pouvez le faire dans un assez simple:
Il serait certainement utile pour que cette méthode existe pas automatiquement si.
Comme dstarh dit, sauf si vous êtes à la recherche d'une méthode non-destructive qui retourne une nouvelle carte avec vos indices peuplée, Rob Hruska's réponse est ce que vous cherchez.
dstarh's réponse vous offre la non-destructive version de
collectWithIndex
, mais les poignées de la collection réelle de résultats trop.J'ai l'habitude de trouver qu'il est préférable de déléguer ce genre de levage lourd à la réception de l'objet, de manière à jouer gentil avec polymorphes
collect
implémentations, c'est à dire, dans le cas spécifique de la classe implémentecollect
différemment (que de simplement mettre les résultats dans un tableau), ayantcollectWithIndex
délégué à il sera de garantir l'homogénéité de comportement. Voici comment le code ressemblerait à:Reportez-vous à ce gist pour un exemple pour les deux
eachWithIndex
etcollectWithIndex
.Aussi, comme les commentaires à votre question de l'état, il y a deux Jira questions ouvertes pour la fonction que nous avons décrit- GROOVY-2383 & GROOVY-3797