PDA

View Full Version : [Java] Problema esplorazione Map contenente una Linked List


<^MORFEO^>
01-08-2013, 11:10
Salve a tutti :D

Ho un problema (probabilmente banale) per l'esplorazione degli elementi di una Map per un programma in Java...

In particolare io ho dichiarato la seguente struttura dati:


Map<GruppoAmici, LinkedList<String>> mapPersone = new HashMap<GruppoAmici, LinkedList<String>>();
LinkedList<String> nomiPersone = new LinkedList<String>();

"GruppoAmici" (posso averne più di uno) è un oggetto che mi permette di creare nuovi amici a cui assegno un nome, questo nome va inserito nella "nomiPersone".

Bene, come faccio io a stamparmi e visualizzare per un determinato "GruppoAmici" singolarmente (cioè nome per nome in oggetti stringa separati) la lista dei nomi dei presenti in quel gruppo? :fagiano:
In particolare, quando vado a creare un nuovo amico di nome Mario per quel "GruppoAmici" io voglio verificare che non vi sia già presente un amico di nome Mario all'interno di "nomiPersone".

Quindi assegnato un "GruppoAmici" voglio poter esplorare ed estrarre singolarmente tutti gli elementi che compongono la Linked List associata a quel "GruppoAmici" :stordita:

Ho scritto questo codice ma non mi permette di esplorare singolarmente tutti gli elementi della Linked List...


Set<Map.Entry<GruppoAmici, LinkedList<String>>> set = mapPersone.entrySet();
Iterator<Map.Entry<GruppoAmici, LinkedList<String>>> i = set.iterator();
while(i.hasNext()){
Map.Entry<GruppoAmici, LinkedList<String>> letto = i.next();
System.out.println("Singolo elemento letto: "+letto + "\n");
}


mi torna la Linked List come elemento unico e non magari come ArrayList di stringe o singole stringhe :cry:

[Kendall]
01-08-2013, 14:15
Salve a tutti :D

Ho un problema (probabilmente banale) per l'esplorazione degli elementi di una Map per un programma in Java...

In particolare io ho dichiarato la seguente struttura dati:


Map<GruppoAmici, LinkedList<String>> mapPersone = new HashMap<GruppoAmici, LinkedList<String>>();
LinkedList<String> nomiPersone = new LinkedList<String>();

"GruppoAmici" (posso averne più di uno) è un oggetto che mi permette di creare nuovi amici a cui assegno un nome, questo nome va inserito nella "nomiPersone".

Bene, come faccio io a stamparmi e visualizzare per un determinato "GruppoAmici" singolarmente (cioè nome per nome in oggetti stringa separati) la lista dei nomi dei presenti in quel gruppo? :fagiano:
In particolare, quando vado a creare un nuovo amico di nome Mario per quel "GruppoAmici" io voglio verificare che non vi sia già presente un amico di nome Mario all'interno di "nomiPersone".

Quindi assegnato un "GruppoAmici" voglio poter esplorare ed estrarre singolarmente tutti gli elementi che compongono la Linked List associata a quel "GruppoAmici" :stordita:

Ho scritto questo codice ma non mi permette di esplorare singolarmente tutti gli elementi della Linked List...


Set<Map.Entry<GruppoAmici, LinkedList<String>>> set = mapPersone.entrySet();
Iterator<Map.Entry<GruppoAmici, LinkedList<String>>> i = set.iterator();
while(i.hasNext()){
Map.Entry<GruppoAmici, LinkedList<String>> letto = i.next();
System.out.println("Singolo elemento letto: "+letto + "\n");
}


mi torna la Linked List come elemento unico e non magari come ArrayList di stringe o singole stringhe :cry:

Non puoi ottenere la linked list relativa alla determinata Key che gli dai in pasto, e poi iterare su di essa per ottenere i suoi valori?
Ora non sono un gran conoscitore del java, ma spulciando la relativa api mi suona strano che tu non possa fare una cosa tipo:


GruppoAmici gruppoAmici = new GruppoAmici(); // o qualsiasi altro costruttore la classe abbia

LinkedList<String> nomiPersone = mapPersone.Get(gruppoAmici);



Quindi iterare su nomiPersone per ottenere ogni singola stringa nome.

mone.java
01-08-2013, 14:19
Non ho ben capito la domanda ma questo potrebbe chiarirti le idee....


for(LinkedList<String> amici : mapPersone.values()) {
for(String amico : amici) {
System.out.println("Amico:"+amico;);
}
}

oppure

for(GruppoAmici gruppo : mapPersone.keySet()) {
System.out.println("Gruppo: "+gruppo);
for(String amico : mapPersone.get(gruppo)) {
System.out.println(" Amico:"+amico);
}
}


edit: mi sono accorto che la chiave è di tipo GruppoAmici e non string

<^MORFEO^>
01-08-2013, 20:13
Grazie mille per le risposte!! :D

;39792392']
GruppoAmici gruppoAmici = new GruppoAmici(); // o qualsiasi altro costruttore la classe abbia

LinkedList<String> nomiPersone = mapPersone.Get(gruppoAmici);


Quindi iterare su nomiPersone per ottenere ogni singola stringa nome.

La soluzione che cercavo era proprio questa! :D

Non ho ben capito la domanda ma questo potrebbe chiarirti le idee....


for(LinkedList<String> amici : mapPersone.values()) {
for(String amico : amici) {
System.out.println("Amico:"+amico;);
}
}

oppure

for(GruppoAmici gruppo : mapPersone.keySet()) {
System.out.println("Gruppo: "+gruppo);
for(String amico : mapPersone.get(gruppo)) {
System.out.println(" Amico:"+amico);
}
}


edit: mi sono accorto che la chiave è di tipo GruppoAmici e non string

Grazie comunque, per fortuna ho risolto.. Usando l'iterator sulla Linked List che ottengo di ritorno dalla mapPersone.Get(gruppoAmici), poi riesco ad esplorarne ogni singolo elemento