java - 操作++/-- 的参数无效

标签 java arrays list arraylist hashmap

我想对 HashMap<String, Integer> 做一些操作属于 ArrayList<HashMap<String, Integer>> .但我收到以下错误:Invalid argument to operation++/-- when doing ths logEntry.get(key) ++如下:

....
Integer tempSize = ...;
List<HashMap<String, Integer>> tokenCollection = new ArrayList<>(tempSize);
while(tokenCollection.size() < tempSize) {
    tokenCollection.add(new HashMap<String, Integer>());
}
....
for (int i = 0; i < tempSize; i++) {
    String key = ...;
    HashMap<String, Integer> logEntry = tokenCollection.get(i);
    if (logEntry.containsKey(key)) {
      logEntry.get(key) ++; // ERROR
    } else {
      logEntry.put(key, 1);
    }
}

然后,我必须将代码更改为以下代码,它才有效:

    if (logEntry.containsKey(key)) {
      Integer tempValue = logEntry.get(key);
      tempValue++;
      logEntry.remove(key);
      logEntry.put(key, tempValue);
    } else {
      logEntry.put(key, 1);
    }

但这增加了很多额外的操作。我可以避免这种情况吗?另外,我认为我这样做的方法太复杂或愚蠢,有没有更简单的方法?

最佳答案

正如其他答案所述,您不能直接改变 key 。 但是您可以进一步缩短代码:

logEntry.put(key, logEntry.containsKey(key) ? logEntry.get(key) + 1 : 1);

关于java - 操作++/-- 的参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35623981/

相关文章:

java - SpecJMS 和 HornetQ

java - 问题 - 使用 gradle 创建目录不起作用

javascript - 找到距离原点 (0, 0) 最近的 K 个点

ios - var arr :[String] = [] and var arr = [String]() 之间的 Swift 区别

java - 使用 gradle 构建 Cordova 项目时覆盖 Java 版本

arrays - cudaArray 与设备指针

java - 当日期为字符串时,如何按日期对对象列表进行排序?

list - 追加到列表 F# 的开头

ios - Text()和Divider()之间的空间

java - 我可以查询列表吗?