2014-01-10 6 views
25

У меня есть две картыПреобразование Map <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); 
      } 
     } 

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

+0

Почему бы не использовать метод putAll api, если вы хотите сохранить обе ссылки. –

ответ

28

Вы можете просто использовать putAll: (см. the Javadoc)

filterMapObj.putAll(filterMap); 

Edited добавить: Я хотел бы отметить, что этот метод является более или менее эквивалентному повторению элементов карты: он сделает ваш код более чистым, но если ваша причина не желать итерации по элементам, на самом деле связана с производительностью (например, если ваша карта огромна), то это вряд ли поможет вам. Другая возможность состоит в том, чтобы написать:

filterMapObj = Collections.<String, Object>unmodifiableMap(filterMap); 

который создает неизменяемый «вид» из filterMap. Это, конечно, более ограничительное, поскольку он не позволит вам самостоятельно изменять filterMapObj и filterMap. (filterMapObj не может быть изменен, и любые изменения в filterMap будут влиять на filterMapObj а.)

+0

@PrasadKharkar: Я бы не сказал, что мое решение лучше твоего, просто они служат для разных целей. (И ваш намек на то, что ОП может иметь проблему XY.) Ничего плохого в том, чтобы иметь оба. :-) – ruakh

7

Для этого можно использовать оператор подстановки. Определите filterMapObj как Map<String, ? extends Object> filterMapObj, и вы можете напрямую назначить ему filterMap. Вы можете узнать о generics wildcard operator

1

Вы можете использовать метод putAll для решения problem.The Объект класса отец всех объектов, так что вы можете использовать putAll без конвертировать.

Смежные вопросы