Newsgroup: it.comp.java
Titolo: Hashmap

Ciao a tutti,
ho un problema, ho un array di String contenente diverse tipologie di
dati (date, numeri, stringhe vere e proprie) ad esempio: ["5.0"],
["FIAT"],["12/08/09"]
Ho poi un HashMap<String,String> contenente coppie identificanti
NomeCampo,TipoDato ad esempio Ask,Double eccetera nello stesso ordine
dell'array String. Nell'esempio: ["Ask","Double"],
["Instrument","String"],["TradeDate","Date"].
In un certo punto del codice devo ottenere una nuova struttura dati -
vorrei fosse una nuova HashMap<String,Object>, in cui nel campo chiave
si inserisce la stringa "NomeCampo" e nel campo "Object" si inserisce
un oggetto del tipo definito nella HashMap con valore dato dal primo
array.
Nel nostro esempio: ["Ask", oggetto Double (5.0)],
["Instrument","FIAT"],["TradeDate", oggetto Date (12/08/09)]
1) non riesco a scorrere l'HashMap ... in effetti non è un array o un
arraylist e dovrei ragionare per chiave. Ma qui mi serve scorrerla
tutta e mappare uno a uno
2) come si effettua il mapping mi sfugge
3) come riesco a fare la creazione dell'oggetto il cui tipo è la
stringa definita nella HashMap e valore nell'array ??
Grazie mille per i consigli !
Ale

 stringa definita nella HashMap e valore nell'array ??
Invece di HashMap<String,String> potresti fare HashMap<String,Class>, 
poi usare le classi reflection per popolare l'hashmap degli oggetti.
Ma forse non ho capito cosa intendevi.
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'


Semplifichiamo: l'HashMap<String,String> coi campi <TradeDate,Date>,
<Ask,String> ecc vorrei scompattarla in 2 array di stirnghe, uno
relativo alle chiavi e l'altro ai valori.
A questo punto ho 3 array: Array con le chiavi ossia i NomiCampi
(String), Array con i valori ossia la tipolgia di campo
Data,String,Double ...(String) e Array con i valori (String ad esempio
"FIAT", "12/09/09/" ecc).
Ho bisogno poi di creare l'HashMap finale<String,Object> - sono un po'
cotto e mi potrebbero venire solo idee accrocchiate - , ossia visto
che i 3 array hanno stesso numero di elementi e soprattutto gli
elementi con lo stesso indice sono quelli che mi interessano perchè
vorrei mettere nell'HashMap come chiavi i NomiCampi e valori quelli
presi dall'array valori ma inseriti come oggetti la cui tipologia è
quella dell'array campo.
Non so se è più chiaro, magari hai qualche idea anche te.
Grazie ancora,
Alessandro

 quella dell'array campo.
per creare il terzo hashmap con gli oggetti avendo 3 array di stringhe 
non vedo alternativa se non un if/elseif infinito.
Potendo farlo, sarebbe conveniente che l'array dei titi fosse un Class[] 
per cui:
String[] campi;
Class[] tipi;
String[] valori;
HashMap<String,Object> oggetti;
for(int i = 0; i < campi.length; i++) {
	Constructor c = tipi[i].getConstructor(new String[1]);
	Object o = c.newInstance(valori[i]);
	oggetti.put(campi[i], o);
}
Ovviamente tutto funziona se i tipi hanno tutti un costruttore con 
l'argomento String, come tutte le classi che derivano da 
java.lang.Number e anche java.util.Date sebbene il costruttore 
Date(String) sia deprecato. Con questo metodo gli ipotetici if si 
ridurrebbero di molto, ad esempio, per tutti i numeri un solo if
for(int i = 0; i < campi.length; i++) {
    Object o;
    if (tipi[i].getSuperclass() == java.lang.Number.class) {
	Constructor c = tipi[i].getConstructor(new String[1]);
	o = c.newInstance(valori[i]);
    } else if (tipi[i] == java.util.Date.class) {
	o = new DateFormat().parse(valori[i]);
    } else {
	o = valori[i];
    }
    oggetti.put(campi[i], o);
}
Se vuoi mantenere String[] tipi; puoi comunque usare il metodo statico 
Class.forName(tipi[i]) e procedere come sopra, in questo caso però il 
nome del tipo deve essere il fully qualified class name, ovvero, ad 
esempio, "java.util.Date" e non semplicemente "Date",in mancanza 
dovresti aggiungere tu il package che pero' ti complica la vita con una 
serie di try/catch, ad esempio:
Class c;
try {
   c = Class.forName("java.lang."+"tipi[i]);
} catch (ClassNotFoundException e) {
   try {
     c = Class.forName("java.util."+"tipi[i]);
   } catch (ClassNotFoundException e) {
     ...
