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); //
    }

}

また、2番目のループでキーを挿入すると、最初のキーが削除され、新しく処理された値を持つ別のキーが挿入されますか。

4

3 に答える 3

5

int次のように変更する必要がありますInteger

Integer found = m.get(temp);

'int'はプリミティブであり、nullと比較することはできません。

マップキーは一意であるため、同じキーを2回入力すると、置き換えられます

于 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 に答える