[英]Java: What's the right way of writing a generic HashMap merge method?
[英]What's the right way to build Java Map that is a HashMap but converts values on input and output?
我基本上需要一个稍作修改的HashMap
版本,每当读取或写入一个值时,都需要对其进行转换。 到目前为止,我已经尝试了以下方法:
public class MyMap implements Map<String, Object> {
private HashMap<String, MyType> map;
public Object get(Object key) {
return map.get(key).getValue();
}
public Object put(String key, Object value) {
return map.put(key, MyType.wrap(value)).getValue();
}
... all other methods of the Map interface are handled by map
}
我希望这就是我需要做的,但我正在努力使用这两种方法:
Set<Entry<String,Object>> entrySet()
Collection<Object> values()
那些我不能只转发到 map 因为值需要一一转换。 当然,我基本上可以从 HashMap 复制实现并对其进行修改以满足我的需求,但这似乎是一个相当丑陋的解决方案,在我这样做之前,我想确保我不会错过一个更好的解决方案。
有没有更好的办法?
您可以将 hashmap 包装在 class 中,并在该 class 上公开方法以添加或删除。
像这样
Class MyHashmap {
private Map map = new HashMap();
//methods for add/remove to wrap and put in HashMap
public void add(String ,Object) {
map.put(key, MyType.wrap(value)).getValue();
}
//同样的方式你可以添加删除方法。
看看 Apache Commons TransformedMap看看它是否符合您的需求。
你正在做的事情本身就很丑陋,所以我不会担心稍微丑陋的实现。 要么按照您的建议进行操作,要么让 get/put 方法将转换后的值放入 map,然后其他方法只是简单的包装器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.