0

我有一个字符串到整数的映射。我想检查地图是否有某个字符串,如果有,请修改它映射到的整数值。

Map <String, Integer> m= new SortedMap <String,Integer>();
Map <String, Integer> m2 = new SortedMap<StringInteger>();
//do some stuff
Iterator <String,Integer>  i = m2.iterator();
//add some values into the first map first map

    while (i.hasNext()){
       String temp =  i.next();
      int found = m.get(temp);
     if ( found != null) {//this is giving me a syntax error , something about how ints 
                                                               can't be null , do I just compare it to zero

    //process value that temp maps to 
       averages.put(temp, val); //
    }

}

另外,当我在第二个循环中输入密钥时,它会删除第一个密钥,并用新的过程值放入另一个密钥。

4

3 回答 3

5

您需要更改intInteger

Integer found = m.get(temp);

'int' 是原语,不能与 null 进行比较。

映射键是唯一的,因此如果您将相同的键放置两次,它将被替换

于 2012-07-22T07:54:57.720 回答
2

看起来你想要做的事情可以用 putAll 来完成。

Map<String, Integer> both = ...
both.putAll(m1);
both.putAll(m2);

这将包含 m2 中的所有值以及仅 m1 中的任何值。

于 2012-07-22T08:03:10.547 回答
1

通过对可变自定义类的引用添加类似这样的东西:

Map<String, MyValue> myMap = new HashMap<String, MyValue>();
(...)
MyValue value = myMap.get(temp);
value.inc();

(...)

public class MyValue {
    private int value;
    public int get() {
        return value;
    }
    public void set(int newValue) {
        this.value = newValue;
    }
    public void inc() {
        value++;
    }
}

编辑:使用上述方法增加所有值:

for(MyValue value : myMap.values()) {
    value.inc();
}

没有 MyValue 包装器:

for(String key : m.keySet()) {
    Integer value = m.get(key);
    m.put(key, value + 1);
}

请参阅地图接口 API

于 2012-07-22T08:07:56.187 回答