Преобразование карты <String, String> в карту <String, Object>
У меня есть два карты
Map<String, String> filterMap
Map<String, Object> filterMapObj
Мне нужно, чтобы я преобразовал это Map<String, String>
в Map<String, Object>
.
Здесь я использую код
if (filterMap != null) {
for (Entry<String, String> entry : filterMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
Object objectVal = (Object)value;
filterMapObj.put(key, objectVal);
}
}
Он отлично работает, есть ли другие способы, с помощью которых я могу это сделать, без повторения всех записей на карте.
Ответы
Ответ 1
Вы можете просто использовать putAll
:
filterMapObj.putAll(filterMap);
(См. Javadoc.)
Отредактировано для добавления:. Следует отметить, что вышеупомянутый метод более или менее эквивалентен итерации над элементами карты: он сделает ваш код более чистым, но если ваша причина не желать итерация по элементам на самом деле связана с производительностью (например, если ваша карта огромна), то она вряд ли поможет вам. Другая возможность - написать:
filterMapObj = Collections.<String, Object>unmodifiableMap(filterMap);
который создает немодифицируемый "вид" filterMap
. Разумеется, это более ограничительное, поскольку он не позволит вам независимо изменять filterMapObj
и filterMap
. (filterMapObj
не может быть изменено, и любые изменения в filterMap
будут влиять и на filterMapObj
.)
Ответ 2
Для этого вы можете использовать подстановочный оператор.
Определите filterMapObj
как Map<String, ? extends Object> filterMapObj
, и вы можете напрямую назначить ему filterMap
. Вы можете узнать о универсальном подстановочном указателе
Ответ 3
Вы можете использовать метод putAll для решения проблемы. Объект - это класс отца всех объектов, поэтому вы можете использовать putAll без преобразования.