我有一个Map,在这种情况下,Object可以是Number,String,List,Array或Date之一。 我需要复制这个Map,但是如果对象的类型是Date(转换细节不重要),我需要在结果中做一些转换。
我想我需要通过Map&读取递归信息。子地图,但不能为我的生活弄清楚如何做到这一点。有人可以帮忙吗?
我可以弄清楚如何阅读完整的地图,但是不能弄清楚如何把它拿出来。
这是我想要做的一种轮廓(不工作) - 它不会创建输出图。
private void convertResult(Object o) {
Map<String, Object> returnMap = new HashMap<String, Object>();
if (o instanceof Map) {
for (Map.Entry<Object, Object> entry: ((Map<Object, Object>)o).entrySet()) {
convertResult(entry.getValue());
}
return;
} else if (o instanceof List) {
for (Object li: (List) o) {
convertResult(li);
}
return;
} else if (o instanceof Number) {
return;
} else if (o instanceof Boolean) {
return;
} else if (o instanceof String) {
return;
} else if (o instanceof Date) {
// convert the date here
return;
} else if (o.getClass().isArray()) {
JsonArray array = new JsonArray();
for (Object li: (Object[])o) {
convertResult(li);
}
return;
} else {
throw new IllegalArgumentException("Unsupported object " + o.getClass());
}
}
答案 0 :(得分:0)
对于列表和地图,您应该获取给定的结果并将其作为条目添加到地图中。
Object result = convertResult(entry.getValue());
returnMap.put(entry.getKey(),result);
不确定获取密钥的函数名称是否为entry.getKey(),但我认为你明白我的观点。 convertResult()返回entry.getValue()的转换,因此您应该将其添加到地图中。当它发现整数,日期或其他任何内容时,递归就会完成。在这种情况下,您应该返回转换后的值(即使您没有触摸它),因为它是您将放在地图中的值。