2013-03-04 3 views
8

Я потянув Int от объекта курсора Монго следующим образом:Самый простой способ получить int из результата mongo?

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

Это кажется странным, что я должен тройной бросок, чтобы получить его в целое, есть лучший способ?

+0

Для уточнения, автозапуск представляет собой целочисленное значение, а не с плавающей запятой. Я делаю это здесь или в другом месте, в конце концов число, которое возвращается из Монго, в конечном итоге будет использовано как int. – justkevin

ответ

2

Да, вам нужен только один актерский состав.

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

Это дает мне «java.lang.ClassCastException: java.lang.Double не может быть применено к исключению среды выполнения java.lang.Integer». – justkevin

+0

Ну, тогда вам нужен двойной! – user

+0

@justkevin Ваша переменная «автозапуск» имеет тип double. Я обновил код. – poitroae

3

Кроме того, вы можете сделать это следующим образом:

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

Что касается Вашего последнего комментария:

Если вы хотите дважды, используйте это:

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

Но в чем смысл этого? Вы могли бы иметь:

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

+0

Преобразование числа в строку и обратно очень неэффективно. – rustyx

13

Я думаю, что вы действительно ищете что-то вроде этого:

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

Нет преобразования в строку и она безопасна, если значение преобразуется к Двойной или длинный (с потенциальной потерей точности) от исходного значения Integer. Двойной, длинный и целочисленный все номера.

HTH Rob

Смежные вопросы