7
votes

Groovy 'Cheking' à venir avec un itérateur?

J'ai divers scénarios dans des boucles où je voudrais «jeter un coup d'œil» ou «sauter» en avance tout en itérant à travers des objets de traitement.

Un scénario est immenté à travers des lignes d'un fichier et il y a un caractère de «continuation» à la fin d'une ligne indiquant pour combiner la ligne suivante avec la ligne actuelle. Si je ne fais que boucler ce n'est pas trop difficile, je peux simplement lire la ligne suivante et heurter mon compteur / index.

Ce n'est pas aussi évident est le modèle de faire cela avec mon itérateur. Je veux effectivement consommer la ou les lignes suivantes sans quitter ma fermeture. Mais je ne suis même pas sûr que cela soit possible. Y a-t-il un bon modèle de conception pour ce modèle d'itération en utilisant une fermeture, donc je n'ai pas à recourir à une boucle moins groovy? Est-ce peut-être une forme d'itérateur avec une pile pour pousser / faire apparaître des objets pour le traitement?


1 commentaires

J'utilise généralement un décorateur autour de l'itérateur comme celui-ci: gist.github.com/ataylor284/5389604


3 Réponses :


1
votes

Je ferais un itérateur qui serait chargé de combiner des lignes. Pour l'exemple de continuation de la ligne, l'itérateur peut prendre les lignes, lire dans le fichier dans son constructeur, puis disposer de la méthode suivante lecture des lignes, en lisant à l'avance lorsqu'il trouve un caractère de continuation, de sorte que le Les caractères de continuation sont résolus avant la prochaine étape du pipeline. Donc, quelle que soit la machine d'état dont vous avez besoin serait contenue dans l'itérateur.


0 commentaires

1
votes

Je devais mettre en œuvre quelque chose de similaire il y a quelque temps. J'ai eu un fichier volumineux avec des données séparées par pipe sur chaque ligne et que les données pourraient continuer dans la ligne suivante, mais je ne pouvais savoir que si je "jette un coup d'œil" la ligne suivante. J'ai fini par utiliser ArrayList comme une pile combinée à une méthode d'aire d'axe: xxx


0 commentaires

0
votes

Question intéressante.

Le problème clé ici est que vous devez porter un État à l'état via des itérations. P>

Un moyen de le faire pourrait être d'utiliser une variable externe (ici j'utilise un Tableau de chaînes et liste # chacun code> au lieu d'un fichier et fichier # chaque ligne code>, mais ils doivent être analogues): P>

Processing "Single line."
Processing "Long line continuation."
Processing "Single line."


0 commentaires