PDA

View Full Version : [Java] Problema con HashMap, aiutino?


e-commerce84
07-07-2011, 14:24
Ciao,
la mia situazione è questa: dentro un metodo init() aggiungo 3 oggetti di tipo: PrioritaProcessiDTO ad una lista chiamata elements.

Ogni oggetto di tipo PrioritaProcessiDTO contiene solamente 3 campi: tipoProcesso (di tipo String che può valere solo: "annullamento", "sostituzione" o "controllo"), prioritaProcesso (di tipo int) e selezionato (di tipo boolean che però ora non serve)

La lista elements viene correttamente inizializzata, infatti il primo ciclo for stampa correttamente i valori contenuti nelle variabili tipoProcesso e prioritaProcesso di ogni oggetto nella lista.

Ora però vorrei fare in modo che: la lista elements venga scorsa dall'inizio alla fine e che venga creata una entry nella HashMap oldPriorityMap inserendo la coppia <Tipo Processo, Priorità Processo> con Tipo Processo come key per ogni elemento della lista, in pratica ho fatto così:


oldPriorityMap.put(elements.get(i).getTipoProcesso(), elements.get(i).getPrioritaProcesso());


che inserisce nella mappa il valore restituito da getTipoProcesso sull'oggetto in posizione i della lista come key ed il rispettivo valore di priorità come valore collegato a quella key.

Il codice della mia classe è il seguente:




Solo che non funziona infatti i successivi println di controllo mi ritornano null come se nella mappa non avesse messo nulla:

[code]
public void init() throws InfoportalWebException {
try
{
System.out.println("Sono dentro il metodo init");
PrioritaProcessiDTO annullamento = new PrioritaProcessiDTO("annullamento", 1);
PrioritaProcessiDTO sostituzione = new PrioritaProcessiDTO("sostituzione", 2);
PrioritaProcessiDTO controllo = new PrioritaProcessiDTO("controllo", 3);

elements.add(annullamento);
elements.add(sostituzione);
elements.add(controllo);

int elementsSize = elements.size(); // Numero di elementi dentro la lista elements
System.out.println("elementsSize: " + elementsSize);

// Stampa cosa c'è nell'array elements:
for(int i = 0; i < elementsSize; i++)
System.out.println("Tipo Processo: " + elements.get(i).getTipoProcesso() + " Priorita Processo: " + elements.get(i).getPrioritaProcesso());

// Inizializzo la mappa oldPriorityMap inserendo le coppie <Tipo processo, Priorità Processo>
for(int i = 0; i < elementsSize; i++){
oldPriorityMap.put(elements.get(i).getTipoProcesso(), elements.get(i).getPrioritaProcesso());
}

// Stampa il contenuto della mappa relativo alle 3 key inserite:
System.out.println("Controllo: " + oldPriorityMap.get(controllo));
System.out.println("Sostituzione: " + oldPriorityMap.get(sostituzione));
System.out.println("Annullamento: " + oldPriorityMap.get(annullamento));


}
catch(Exception ex3)
{
ex3.printStackTrace();
}

}
}


E questo è l'output che mostra che appunto sembra non abbia inserito nulla dentro la mappa:


Sono dentro il metodo init
elementsSize: 3
Tipo Processo: annullamento Priorita Processo: 1
Tipo Processo: sostituzione Priorita Processo: 2
Tipo Processo: controllo Priorita Processo: 3
Controllo: null
Sostituzione: null
Annullamento: null


Come mai? Cosa ho sbagliato? Come risolvere?

Grazie
Andrea

banryu79
07-07-2011, 14:46
Una mappa restituisce null quando la chiave passata per la ricerca non è presente nella mappa: è quello che ti sta capitando.

La svista è che questo:

// Stampa il contenuto della mappa relativo alle 3 key inserite:
System.out.println("Controllo: " + oldPriorityMap.get(controllo));
System.out.println("Sostituzione: " + oldPriorityMap.get(sostituzione));
System.out.println("Annullamento: " + oldPriorityMap.get(annullamento));

va corretto così:

// Stampa il contenuto della mappa relativo alle 3 key inserite:
System.out.println("Controllo: " + oldPriorityMap.get(controllo.getTipoProcesso()));
System.out.println("Sostituzione: " + oldPriorityMap.get(sostituzione.getTipoProcesso()));
System.out.println("Annullamento: " + oldPriorityMap.get(annullamento.getTipoProcesso()));