我正在开发一个项目,我将在下面的方法中使用String和Object的Map。假设这个data Map
包含这样的内容 -
a = p
b = q
c = r
d = s
e = t
f = u
g = v
h = w
i = x
其中a, b, c, d, e, f, g
是键,p, q, r, s, t, u, v
在上面的地图中有相应的值。
以下是我的方法 -
private void dataCheck(Map<String, Object> data) {
}
现在我在另一个String和String -
的地图中有另一个这样的静态映射public static final Map<String, String> STATIC_MAPPING = Collections.unmodifiableMap(new LinkedHashMap<String, String>() {{
put("a","hello");
put("b","world");
put("c","titan");
put("d","david");
put("e","elephant");
put("f","fire");
put("g","gel");
}});
此处密钥a
的值为hello
,密钥b
的值为world
,密钥c
的值为titan
且相同其他键值对的东西。
现在在我上面提到的下面的方法中,我将在Map中获取包含如上所示数据的值 -
private void dataCheck(Map<String, Object> data) {
// how to get extract the value of the key from the
// STATIC_MAPPING map corresponding to data map key.
// print out a new map here with latest mappings
}
现在数据地图将有a = p
,因此hello = p
会被a
映射到hello
,如STATIC_MAPPING所示,与其他字段相同好。我怎样才能有效地做到这一点?
假设我们在数据图中没有任何关键字的映射,那么我们将保持原样。
更新: -
所以我的新地图应该有这样的数据 -
hello = p
world = q
titan = r
david = s
elephant = t
fire = u
gel = v
h = w
i = x
由于密钥h
和i
没有映射,所以我会保留原样。
答案 0 :(得分:0)
for (Map.Entry<String, Object> entry : data.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
String staticMappingValue = (String) STATIC_MAPPING.get(key);
if (staticMappingValue != null) {
newMap.put(staticMappingValue, value);
} else {
newMap.put(key, value);
}
}
那样newMap
:
["hello":"p", "world":"q", etc..., "h":"w"]
已编辑:遵循Antoine Wils的建议并减少对地图的访问,因为问题突出了效率。