2013-03-04 17 views
8

sto tirando un int da un oggetto cursore mongo in questo modo:Il modo più semplice per recuperare un int da un risultato di mongo?

DBObject mapObj = cursor.next(); 
int autostart = (int) (double) (Double) mapObj.get("autostart"); 

Sembra strano che devo fusione tripla per arrivare in un numero intero, c'è un modo migliore?

+0

Giusto per chiarire, l'avvio automatico rappresenta un valore intero, non un punto mobile. Se lo faccio qui o altrove, alla fine il numero che torna da Mongo verrà usato come int. – justkevin

risposta

2

Sì, hai solo bisogno di un cast.

double autostart = (Double) mapObj.get("autostart"); 
+1

Questo mi dà un "java.lang.ClassCastException: java.lang.Double non può essere lanciato su java.lang.Integer" eccezione di runtime. – justkevin

+0

Bene, allora hai bisogno di un doppio! – user

+0

@justkevin La variabile "autostart" è di tipo double. Ho aggiornato il codice. – poitroae

3

Inoltre, si può fare in questo modo:

int autostart = Integer.valueOf(mapObj.get("autostart").toString());

Per quanto riguarda il tuo ultimo commento:

Se si desidera doppio, utilizzare questo:

int autostart = Double.valueOf(mapObj.get("autostart").toString());

Ma che senso ha? Si potrebbe piuttosto avere:

double autostart = Double.valueOf(mapObj.get("autostart").toString());

+0

Convertire un numero in stringa e viceversa è molto inefficiente. – rustyx

13

Penso che quello che stai veramente cercando è qualcosa di simile:

DBObject mapObj = cursor.next(); 
int autostart = ((Number) mapObj.get("autostart")).intValue(); 

Nessuna conversione in una stringa ed è sicuro se il valore viene convertito in un Doppio o Lungo (con la potenziale perdita di precisione) dal valore intero originale. Double, Long e Integer estendono il numero.

HTH Rob

Problemi correlati