在HashMap中的所有对象上运行方法

时间:2014-08-16 11:05:21

标签: java foreach hashmap

我认为当我重写部分代码以使其更易于维护时,我误解了HashMap的应用。

joints是一个HashMap,包含一组由String标识的对象:

private HashMap<String, SomeObject> joints = new HashMap(5, 1);

通过put()方法,HashMap的种群很简单。但是我现在需要在每个方法上运行一个方法。下面的代码在第一个时期产生语法错误,但我相信它说明了我想要做的事情。

joints.("knee").someMethod(someValue);
joints.("hip").someMethod(someOtherValue);
joints.("shoulder").someMethod(someOtherValue);
joints.("neck").someMethod(someOtherValue);
joints.("elbow").someMethod(someOtherValue);

什么是有效/正确的等价物?上面提到的?我在想get()对象,从地图中删除它,修改对象,把它放回HashMap。

虽然foreach会更近一步,但这是一个没有实际意义的方法,因为someMethod()的争论对于每个对象都是不同的。

3 个答案:

答案 0 :(得分:2)

要访问Map中的特定值(而不是循环遍历所有值),请使用get方法。

joints.get("knee").someMethod(someValue);

答案 1 :(得分:2)

一种不错的方法可能是使用通用方法。

首先,使用您的方法定义一个接口,该接口对于地图中的所有值都是通用的:

public interface SomeInterface {

    public void someMethod();

}

然后,您可以迭代地图并为每个值调用公共方法:

public <T extends SomeInterface> void callMethodOnValues(Map<String, T> map) {
    for (T value : map.values()) {
       value.someMethod();
    }
}

答案 2 :(得分:0)

如果从value检索到的key是实现someMethod()的类的实例,那么它将是这样的:

for(String key: joints.keySet())
{
   someObject obj = joints.get(key);
   obj.someMethod(value);
}