2015-11-02 2 views
0

Мой вопрос заключается в следующем, у меня есть HashMapПеребор HashMap <String, String> Основные изменения в BigDecimal

//for (String tablaBuscar : listaTablas) { 
     // RECUPERAR REGISTROS POR TABLA 
    HashMap<String,String> listaRegistros =(HashMap<String,String>) RequerimientosTablaDestino 
       .getListaLineasPorTablaYColumna(idCabecera,idCriterio); 

, когда я хочу итерацию (я попробовал несколько способов, это последний)

Iterator<String> entradaMap = listaRegistros.keySet().iterator(); 
Iterator<String> valorMap = listaRegistros.values().iterator(); 
while(entradaMap.hasNext()&&valorMap.hasNext()) { 
    String elemento=entradaMap.next().toString(); 
    int registro =(Integer.parseInt(elemento)); 
    String tablaBuscar = (String)valorMap.next(); 

в строке «ИНТ REGISTRO» я получаю «не отлиты из BigDecimal в Int» Debugging Я видел, что ВСЕГДА ключ хэш-карта является «большой десятичный тип», независимо от того, как я его создал.

Если я пытаюсь использовать его в качестве BigDecimal, как показан на время отладки, я получаю сборники неудачу, потому что «типа missmatch» «не может бросить» и т.д. ...

Так компилятор считает, что ключевым является типом Я поставил, но во время выполнения программа думает, что ключ t всегда является большим децималом.

Любая идея? благодаря

+2

Пожалуйста, пост короткий, но * полную * программу демонстрируя проблему. Я не вижу, как вы получите проблему, о которой вы сообщаете в строке, о которой вы сообщаете ... –

ответ

0

Если ключ установлен только содержит String значения распознаваемо, как BigDecimal, вы можете легко получить фактический BigDecimal объект из ключей итерируя их и используя конструктор принимает String аргумента:

for (String key: myMap.keySet()) { 
    BigDecimal converted = new BigDecimal(key); 
} 

Кроме того, как показанный, нет необходимости в двойной итерации через Iterator на оба ключа и значения.

Если вы хотите получить дополнительный уровень проверки, вы можете поймать NumberFormatException при инициализации BigDecimal, например. new BigDecimal("foo") бросил бы один.

Кроме того, вы можете получить целочисленное значение ваших объектов BigDecimal, вызвав BigDecimal#intValue или BigDecimal.intValueExact.

+0

Спасибо, ребята. Проблема возникла из-за того, что параметризация ibatis не имеет типа java в resultMap. И (не знаю почему) он принимает ключ как BigDecimal, когда объявляется как String. –

0

Я просто столкнулся с этой проблемой. Мигель сослался на решение в своем комментарии на ответ Мены, но быть более явным исправление включает в себя добавление параметра в результирующем картограф, чтобы заставить вернуть строку:

<resultMap type="java.util.HashMap" id="dataTypeMap"> 
    <result column="DATA_TYPE_ID" javaType="java.lang.String" property="id" /> 
    <result column="DATA_TYPE" property="name" /> 
</resultMap>