我的问题是这个,我有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。
有什么想法吗? 感谢
答案 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>