List<Header<? extends Serializable>> headers = new LinkedList<Header<? extends Serializable>>();
for (Map.Entry<String, List<Serializable>> headerEntry : headersMap.entrySet()) {
String name = headerEntry.getKey();
for (Serializable value : headerEntry.getValue()) {
Type type = Header.Type.determineType(value.getClass());
switch (type) {
case STRING:
headers.add(new Header<String>(name, (String)value));
break;
case DATE: