如何在多值映射中查找键的长度/大小?

时间:2015-07-30 14:09:37

标签: java java-ee collections hashmap multivalue

MultivaluedMap map= new MultivaluedMapImpl();
map.add("Accept-Encoding", "compress;q=0.5");
map.add("Accept-Encoding", "gzip;q=1.1");
map.add("Accept-Encoding", "gzip;q=1.2");
map.add("Accept-Encoding", "gzip;q=1.3");

如何找到“Accept-Encoding”键的大小?

2 个答案:

答案 0 :(得分:1)

MultivaluedMap<K, V>实现了Map<K,List<V>>所以

((Map<String,List<String>>)map).get("Accept-Encoding").size();

现在我看到你使用非通用版本(这不是一个好主意):

Map tmp = map instanceof Map ? (Map) map : new HashMap();
// because you don't use generic you should get value as an Object instance
Object value = tmp.get("Accept-Encoding");
// by default we assume that there the value is not a List instance
int size = 0;    

// for security we check that the value instance implements List interface
if (value instanceof List) {
    // we check size of that list
    size = ((List) value).size();
}

短版(并且没有检查):

((List) ((Map) map).get("Accept-Encoding")).size();

您应该明白为什么使用通用版本比原始版本更好。

答案 1 :(得分:0)

使用map.get(itr.next()).size()

代码:

MultivaluedMap map= new MultivaluedMapImpl();
map.add("Accept-Encoding", "compress;q=0.5");
map.add("Accept-Encoding", "gzip;q=1.1");
map.add("Accept-Encoding", "gzip;q=1.2");
map.add("Accept-Encoding", "gzip;q=1.3");

Iterator itr = map.keySet().iterator();
        while (itr.hasNext()) {
            System.out.println(map.get(itr.next()).size());
        }