Подтвердить что ты не робот

Преобразование карты <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);
            }
        }

Он отлично работает, есть ли другие способы, с помощью которых я могу это сделать, без повторения всех записей на карте.

4b9b3361

Ответ 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 без преобразования.