通过一些转换生成另一个Map的Map的递归

时间:2011-11-17 05:28:49

标签: java recursion

我有一个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());
    }

}

1 个答案:

答案 0 :(得分:0)

对于列表和地图,您应该获取给定的结果并将其作为条目添加到地图中。

Object result = convertResult(entry.getValue());
returnMap.put(entry.getKey(),result);

不确定获取密钥的函数名称是否为entry.getKey(),但我认为你明白我的观点。 convertResult()返回entry.getValue()的转换,因此您应该将其添加到地图中。当它发现整数,日期或其他任何内容时,递归就会完成。在这种情况下,您应该返回转换后的值(即使您没有触摸它),因为它是您将放在地图中的值。