2017-09-27 5 views
-1

J'ai donc une liste d'entiers pour chaque objet d'une classe. J'essaie d'itérer sur la liste de chaque objet, quand je rencontre une certaine condition je passe à l'objet suivant et ainsi de suite.Iterators in Java

Ma question ici est, quand je reviens à l'objet perméable qui a encore des éléments non visités dans la liste comment je me souviens de l'itérateur pour cet objet particulier. Voici le code que je l'ai écrit:

void function(Object u, List<Integer> tour, Iterator it) { 
Object e; 
while (it.hasNext()) { 
    e = it.next(); 
    if (!e.visited) { 
     tour.add(e); 
     e.visited = true; 
     Vertex v = e.otherEnd(e.from); 
     v.outgoing++; 
     it = v.adj.listIterator(v.outgoing - 1); 
     //So instead of re-assigning Iterator it each time is there way //to remember the iterator for each list associated with the object? 
    } 
} 
+0

Essayez-vous de stocker une référence à l'Iterator ou essayez-vous de vous souvenir de la position dans la liste? Le problème que vous essayez de résoudre n'est pas clair. – TinkerTenorSoftwareGuy

+0

Je suis confus quant à la raison pour laquelle vous n'avez pas simplement utilisé une deuxième variable Iterator. – VGR

Répondre

0

Theres trois Approches:

Utilisez un pour une nouvelle iterator (mais ce sera seulement pour le deuxième niveau de votre graphique et le code répété)

Le second est de le changer en récursif.

Ou vous pouvez faire quelque chose à propos d'avoir une pile et de le pousser/l'ébrécher si nécessaire.

0

Créez une carte pour stocker l'index que chaque itérateur a obtenu pour un objet. Vous pouvez mettre à jour la carte lorsque vous devez passer à un nouvel objet et en tirer à chaque fois que vous y revenez