Arraylist值不在HashMap中

时间:2013-06-16 09:53:51

标签: java hashmap

我有HashMap如下:

public static HashMap submitService(HashMap inputMap) throws Exception
    {
        //code....

        ArrayList<String> allIdsList = (ArrayList<String>) inputMap.get("Result_List");
        // System.out.println("Result List: " + allIdsList); prints the arraylist (e.g. [2, 21, 6, 3]

        for(int i=0;i<allIdsList.size();i++)
            {
                System.out.println(" values: " + (String)allIdsList.get(i));
            }
    }

arraylist正在控制台中打印(我只是尝试查看列表是否为空)。但对于for循环中的(String)allIdsList.get(i),跟随错误消息即将到来

java.lang.Long cannot be cast to java.lang.String

非常感谢别人的帮助。

4 个答案:

答案 0 :(得分:1)

确保HashMap的类型为HashMap<String,ArrayList<String>>

答案 1 :(得分:0)

替换:public static submitService(HashMap&lt;'String,ArrayList&lt;'String&gt;&gt; inputMap)抛出异常

查看异常,确定传递的参数没有string的arraylist。像它可能是ArrayList&lt;'Object&gt;(列表中存在长值,最终以String格式输出)或Arraylist&lt;'长&GT;

答案 2 :(得分:0)

试试这个:

public static HashMap<String,ArrayList<String>> submitService(HashMap<String,ArrayList<String>> inputMap) throws Exception
{
    //code....

    ArrayList<String> allIdsList = inputMap.get("Result_List");
            for(int i=0;i<allIdsList.size();i++)
        {
            System.out.println(" values: " + allIdsList.get(i));
        }
}

答案 3 :(得分:0)

inputMap来自哪里?从它的外观来看,它的值不是ArrayList<String>类型,而是类似ArrayList<Object>甚至ArrayList<Long>。问题似乎发布在您发布的代码段之外。

由于您在此方法中使用原始类型,编译器不会抱怨(尽管它应该警告您使用原始类型)。但是,虚拟机会在投射失败的地方抛出ClassCastException - 这就是你所看到的。

只需将HashMap<String, ArrayList<String>>作为inputMap接受,即可尝试加强您的签名。这样,你可以摆脱那些可怕的演员表,因为你现在得到编译时类型检查。在最好的情况下,这将为编译器提供足够的信息,以指出您使用错误键入的inputMap调用此方法的位置。然后,您应该只需按照编译器的说明轻松修复错误。如果这不起作用,你可能也在调用中使用原始类型,你需要挖掘堆栈跟踪来修复它们。