如何更改与另一个地图中的值对应的一个地图的键?

时间:2014-01-31 18:36:25

标签: java map

我正在开发一个项目,我将在下面的方法中使用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

由于密钥hi没有映射,所以我会保留原样。

1 个答案:

答案 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的建议并减少对地图的访问,因为问题突出了效率。