2014-01-10 10 views
25

나는이 두지도 나는 그 Map<String, String>Map<String, Object>에 변환하고자하는 것입니다 무엇이 필요지도에

Map<String, String> filterMap 
Map<String, Object> filterMapObj 

<문자열, 개체>을. 내가 코드

 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); 

편집 추가 : 내가 위의 방법이 더 - 또는 - 덜 떨어져 있음을 알아 두셔야합니다 지도 요소를 반복하는 것과 동일합니다. 코드를보다 명확하게 만들지 만 요소를 반복하지 않으려는 이유가 실제로 성능 문제 (예 :지도가 막대한 경우) 인 경우에는 도움이되지 않습니다. filterMap의 변경 불가능한 "보기"를 만들어

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

을 : 또 다른 가능성은 작성하는 것입니다. 물론 더 제한적이므로 filterMapObjfilterMap을 독립적으로 수정할 수 없습니다. (filterMapObj은 수정할 수 없습니다, 그리고 filterMap에 대한 수정도 filterMapObj에 영향을 미칠 것입니다.)

+0

@PrasadKharkar : 나는 내 솔루션이 당신 것보다 낫다고 말하지 않을 것입니다. (그리고 당신은 OP가 XY 문제를 가지고 있을지도 모른다는 것을 암시합니다.) 둘 다 갖는 것은 잘못된 것이 아닙니다. :-) – ruakh

7

와일드 카드 연산자를 사용할 수 있습니다. filterMapObjMap<String, ? extends Object> filterMapObj으로 정의하고 filterMap을 직접 할당 할 수 있습니다. 당신은 약 generics wildcard operator

1

당신은 것은 문제도 개체가 모든 객체의 아버지 클래스입니다 해결하기 위해 putAll에 방법을 사용할 수 있습니다, 그래서 당신은없이 putAll에 사용할 수 있습니다 변하게 하다.