问题描述
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");
如何找到“接受编码”键的大小?
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();
您应该了解为什么使用通用版本比原始版本更好。
2楼
使用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());
}