迭代hashMap <string,string =“”>键更改为BigDecimal

时间:2015-11-02 13:58:36

标签: java hashmap bigdecimal

我的问题是这个,我有hashMap

//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();

在“int registro”行中我得到“无法从BigDecimal转换为Int”调试我已经看到,ALLWAYS哈希映射的关键是“大十进制类型”,无论我创建它的方式。

如果我尝试将其用作调试时间中看到的BigDecimal,我会因为“类型失配”“无法投射”等而导致编辑失败...

所以编译器认为键是我放的类型,但是在运行时程序认为te键总是一个bigDecimal。

有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:0)

如果您的密钥集只包含String可解析为BigDecimal的值,则可以通过迭代它们并使用构造函数取{{1}来轻松地从密钥中检索实际的BigDecimal对象参数:

String

同样如图所示,不需要在键和值上通过for (String key: myMap.keySet()) { BigDecimal converted = new BigDecimal(key); } 进行双重迭代。

如果您需要额外的验证层,则可以在初始化Iterator时抓住NumberFormatException,例如BigDecimal会抛出一个。

此外,您可以通过调用new BigDecimal("foo")BigDecimal来检索BigDecimal#intValue个对象的整数值。

答案 1 :(得分:0)

我刚遇到同样的问题。 Miguel在他对Mena的答案的评论中提到了解决方案,但更明确的是,修复涉及向结果映射器添加一个参数以强制返回String:

<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>