微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过深层HashMap递归迭代

如何解决通过深层HashMap递归迭代

假设一个数组只能在内部包含Maps(而不是其他数组):

public void findNode(HashMap map) {
    for(HashMap.Entry<String, Object> entry : map.entrySet()){
        Object value = entry.getValue();
        if(value instanceof String)
            System.out.println("value = "+value);
        else if(value instanceof HashMap)
            findNode(value);
        else if(value instanceof HashMap[])
            for(int i=0; i<array.length(); i++){
                findNode(array[i]);
    }
}

或者,如果您可以使用3个功能,则可以使其更简单

public void findNode(HashMap map) {
    for(HashMap.Entry<String, Object> entry : map.entrySet()){
        findNode(entry.getValue());
    }
}

public void findNode(String value) {
    System.out.println("value = "+value);
}

public void findNode(HashMap[] value) {
    for(int i=0; i<array.length(); i++){
        findNode(array[i]);
    }
}

解决方法

我有一个类似于以下内容的JSON字符串:

{
    "foo" : "bar","id" : 1,"children":[
        {
            "some" : "string","id" : 2,children : []
        },{
            "some" : "string",children : []
        }
    ]
}

我对此字符串进行了JSON解析,然后将所有对象转换为HashMaps,并将所有数组转换为HashMap []
s。我的问题是我需要一个递归函数来遍历Java中此JSON结构的所有节点。我怎样才能做到这一点?我在想类似的东西:

public HashMap findNode(boolean isArray,HashMap map,HashMap[] array){
    //array stuff
    if(isArray){
        for(int i=0; i<array.length(); i++){
            Object value = array[i];
            if(value instanceof String)
                System.out.println("value = "+value);
            else if(value instanceof HashMap)
                findNode(false,value,null);
            else if(value instanceof HashMap[])
                findNode(true,null,value);
        }
    //hashmap stuff
    }else{
        for(HashMap.Entry<String,Object> entry : map.entrySet()){
            Object value = entry.getValue();
            if(value instanceof String)
                System.out.println("value = "+value);
            else if(value instanceof HashMap)
                findNode(false,value);
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。