2014-01-10 19 views
25

Ich habe zwei KartenKonvertieren Map <String, String> Karte <String, Object>

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

Was ich brauche, ist ich, dass Map<String, String>-Map<String, Object> konvertieren möchten. Hier habe ich den Code

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

Es funktioniert gut verwende, ist es noch andere Möglichkeiten, mit denen ich diese in der Karte ohne Iterieren durch alle Einträge zu tun.

+0

Warum nicht die putAll api-Methode verwenden, falls Sie beide Referenzen beibehalten möchten. –

Antwort

28

Sie nur putAll verwenden: (. the Javadoc See)

filterMapObj.putAll(filterMap); 

Edited hinzufügen: sollte ich beachten Sie, dass das oben beschriebene Verfahren ist mehr oder weniger Dies entspricht der Iteration über die Elemente der Karte: Es macht Ihren Code sauberer, aber wenn Sie nicht über die Elemente iterieren möchten, ist dies ein Performance-Problem (z. B. wenn Ihre Karte riesig ist), wird es Ihnen wahrscheinlich nicht helfen. Eine weitere Möglichkeit ist, zu schreiben:

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

die eine unveränderbare „Ansicht“ von filterMap schafft. Das ist natürlich restriktiver, da es Sie nicht unabhängig von filterMapObj und filterMap ändern lässt. (filterMapObj kann nicht geändert werden, und alle Änderungen an filterMap wird filterMapObj auch beeinflussen.)

+0

@PrasadKharkar: Ich würde nicht sagen, dass meine Lösung besser ist als deine, nur dass sie verschiedenen Zwecken dienen. (Und Ihr deutet an, dass das OP ein XY-Problem haben könnte.) Nichts ist falsch daran, beides zu haben. :-) – ruakh

7

Sie können dafür den Platzhalter verwenden. Definieren Sie filterMapObj als Map<String, ? extends Object> filterMapObj und Sie können die filterMap direkt zuweisen. Sie können lernen, über generics wildcard operator

1

Sie putAll Methode verwenden, kann das Problem.Die Objekt ist der Vater Klasse aller Objekte zu lösen, so können Sie verwenden, ohne putAll Konvertieren.

Verwandte Themen