2015-11-02 42 views
0

我的问题是这样的,我的HashMap遍历一个HashMap <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(); 
在“INT registro”行,我得到

“不能从BigDecimal的转换为内部”调试我已经看到,散列图的ALLWAYS关键是“大小数型”,无论我创造它的方式。

如果我尝试使用它作为一个BigDecimal在调试的时候看到的,我得到的编译失败,因为“型missmatch”“不能投”等等

所以编译器认为,关键是类型我已经说了,但是在程序运行时程序认为te键总是一个大的数字。

有什么想法? 感谢

+2

请发表一个简短而*完整*程序展示问题。我无法看到你将如何解决你报告的问题... –

回答

0

如果您的密钥设定仅包含String值可解析为BigDecimal,你可以很容易地通过迭代它们并使用构造采取String参数检索键的实际BigDecimal对象:

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

另外,作为如图所示,在密钥和值上都不需要通过Iterator进行双重迭代。

如果您需要额外一层验证,您可以在初始化BigDecimal时捕获NumberFormatException,例如, new BigDecimal("foo")会抛出一个。

此外,您可以通过调用BigDecimal#intValueBigDecimal.intValueExact来检索您的BigDecimal对象的整数值。

+0

谢谢,伙计们。发生这个问题是因为ibatis参数化在resultMap中没有java类型。和(Idon't知道为什么)当它被声明为String时,它需要BigDecimal的关键字。 –

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> 
相关问题