PDA

View Full Version : [Java] Iterare su una collezione di generic


e-commerce84
06-11-2010, 11:03
Ciao,
probabilmente si tratta di una banalità ma non tocco gli iteratori da anni e forse mi serve usarli in un programmino che stò terminando.

Allora sono nella seguente situazione: In pratica ho un mio tipo di oggetto Poi (che rappresenta un punto di interesse con nome, longitudine, latitudine, descrizione, etcetc...vabbè non è importante).
Io dichiaro una lista di generici oggetti Poi chiamata result. Dentro tale lista ci vado a mettere il riferimento ad un'ArrayList di generici oggetti Poi (tramite il metodo getRisultato())...e fin quì funziona tutto bene infatti come vedete faccio una serie di System.out che mi visualizzano il contenuto informativo di un arbitrario punto di interesse...ho creato un iteratore e l'ho usato per scorrere la collezione result invocando il metodo hasNext() solo che non succede nulla...probabilmente sono un bel po' arruginito sull'argomento e mi sfugge qualcosa, riuscite ad illuminarmi?

Il problema viene sulla seconda parte in grassetto: io voglio iterare su tale collezione di generici oggetti di tipo Poi, voglio scorrerla dall'inizio alla fine


private List<Poi> result = null; // Contiene il risultato da mostrare sulla mappa

result = GuidaSubActivity.getRisultato(); // Mette la lista di POI nella variabile result
if(result != null){
System.out.println("Sono dentro GuidaGeoReferenziata e result punta a: " + result.toString());

Poi poiMain = null;
poiMain = result.get(3);
System.out.println("Nome poiMain: " + poiMain.getNome());
System.out.println("Lat poiMain: " + poiMain.getLat());
System.out.println("Lon poiMain: " + poiMain.getLon());
System.out.println("WikiLink poiMain: " + poiMain.getWikilynk());

Iterator <Poi> itr = result.iterator();
while (itr.hasNext()) {
Poi element = itr.next();
System.out.print("Nome Poi corrente: " + element.getNome());
}


Grazie

e-commerce84
07-11-2010, 22:06
UP :cry:

*andre*
07-11-2010, 22:34
ciao
non credo di saperti aiutare... ma mi sembra di capire che non entra nel while.. prova a dare prima un itr.first() (mi pare) che porta il puntatore dell'iteratore al primo elemento.. anche se in teoria non ce ne dovrebbe essere bisogno.. l'applicazione è tutta dentro un thread no?

WarDuck
08-11-2010, 11:17
Perché per scorrere la lista non usi questa sintassi? ;)


for (Poi p : result)
{
// fai quello che ti pare con p
}


Credo sia molto meglio, l'unica accortezza è che in questo caso non puoi modificare p, ma puoi solo leggerlo.

banryu79
08-11-2010, 12:40
Perché per scorrere la lista non usi questa sintassi? ;)


for (Poi p : result)
{
// fai quello che ti pare con p
}


Credo sia molto meglio, l'unica accortezza è che in questo caso non puoi modificare p, ma puoi solo leggerlo.
A dire il vero, 'p' può modificarlo, quello che non può fare è modificare 'result', la collezione.
Comunque non cambia nulla, che io sappia, rispetto all'utilizzo esplicito di un iteratore: l'errore lamentato dall'utente al primo post è bizzarro. Io andrei di debug passo-passo.

WarDuck
08-11-2010, 13:51
A dire il vero, 'p' può modificarlo, quello che non può fare è modificare 'result', la collezione.
Comunque non cambia nulla, che io sappia, rispetto all'utilizzo esplicito di un iteratore: l'errore lamentato dall'utente al primo post è bizzarro. Io andrei di debug passo-passo.

Hai ragione, intendevo dire che non puoi modificare la collezione sottostante :D.

Comunque se non erro (il che è probabile dato che non tocco da un po' java) usando l'iteratore puoi rimuovere ad esempio l'elemento corrente, mentre con la sintassi postata da me no.

In ogni caso ove possibile credo sia meglio usare la sintassi stile "foreach", anche per comodità di lettura.

e-commerce84
08-11-2010, 17:14
doh...risolto...in realtà funzionava...è che avevo usato una print e non una println e forse mi ero perso l'output nel LogCat di Android o forse il logcat di Android non stampava l'output della print (anche se mi pare strano) ma voleva la println...vabbè...risolto...grazie mille comunque :D