如何从Map中检索值?

时间:2013-06-12 06:32:41

标签: java

这是我的代码

Iterator it = request.getParameterMap().entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pairs = (Map.Entry)it.next();
            System.out.println(pairs.getKey() + " = " + pairs.getValue());
            it.remove(); // avoids a ConcurrentModificationException
        }

其中request是HttpServletRequest。这是我在控制台中获得的输出

id = [Ljava.lang.String;@3f13bf94
title = [Ljava.lang.String;@5eea278c
dlPhone = [Ljava.lang.String;@98a6bd1
name = [Ljava.lang.String;@77736513

为什么这个Ljava.lang.String ????如何获得准确的价值?

3 个答案:

答案 0 :(得分:5)

  

为什么这个Ljava.lang.String?

因为每个值大概都是String[],并且直接在数组上调用toString并没有提供任何特别有用的东西 - 只是从Object继承的正常实现,它表示类型和系统生成的哈希码。

要获得有用的表示,您可以使用:

String key = (String) pairs.getKey();
String[] values = (String[]) pairs.getValue();
System.out.println(key + " = " + Arrays.toString(values));

请注意,泛型会使这一点更加清晰,但如果getParameterMap仅被声明为返回Map,则您没有太多可继续的内容。您可以执行未经检查的强制转换以至少减少代码量 - 但它实际上并没有给您带来安全性:

@SuppressWarnings("unchecked")
Map<String, String[]> map = (Map<String, String[]>) request.getParameterMap();
for (Map.Entry<String, String[]> entry : map) {
    System.out.println(entry.getKey() + " = " + Arrays.toString(entry.getValue()));
}

答案 1 :(得分:3)

这是因为pairs.getValue()正在返回String数组。只需调试并检查一下。

您应该在pairs.getValue()上进行迭代并在此处打印每个条目,或者这样做 Arrays.toString( (String[])pairs.getValue() )

答案 2 :(得分:0)

试试这个:

Iterator it = request.getParameterMap().keySet().iterator();
        while (it.hasNext()) {
            String key = (String)it.next();
            System.out.println(key + " = " + requset.getParameter(key));
            //it.remove(); // avoids a ConcurrentModificationException
            // ??? why ???
        }