Map Java的递归迭代

Zai*_*bal 1 java recursion hashmap map plist

我正在编写一个递归函数,其目的是迭代pList文件.我的代码是

public static void HashMapper(Map lhm1) throws ParseException {

    //Set<Object> set = jsonObject.keySet();
    for (Object entry : lhm1.entrySet()) {
        if(entry instanceof String)
        {
            System.out.println(entry.toString());
        }
        else
        {
            HashMapper((Map) ((Map) entry).keySet()); //getting Exception java.util.HashMap$HashMap Entry cannot be cast to java.util.Map
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我调用我的函数"HashMapper((Map)((Map)entry).keySet());"时.我正在例外

java.util.HashMap $ HashMap Entry无法强制转换为java.util.Map

我不知道如何调用我的函数以及如何将Hashmap条目转换为Map

Ale*_*exR 8

确实没有进入String.它是Map.Entry,所以你可以根据需要将它投射到这种类型.

然而,自从10年前推出的java 1.5以来,你几乎不需要强制转换.而是使用泛型定义地图并使用类型安全编程.

不幸的是你的代码不是很清楚.你的意思是你的地图的关键或价值是String什么?我们假设key是string,value可以是string或map.(顺便说一下这个非常糟糕的做法,所以我建议你问一下其他问题,你在哪里描述你的任务是什么,并询问如何设计你的程序.)

但无论如何,到目前为止我可以建议你:

public static void hashMapper(Map<String, Object> lhm1) throws ParseException {
    for (Map.Entry<String, Object> entry : lhm1.entrySet()) {
        String key = entry.getKey();
        Object value = entry.getValue();
        if (value instanceof String) {
             System.out.println(value);
        } else if (value instanceof Map) {
            Map<String, Object> subMap = (Map<String, Object>)value;
            hashMapper(subMap);
        } else {
             throw new IllegalArgumentException(String.valueOf(value));
        }

    }
}
Run Code Online (Sandbox Code Playgroud)