java - 空指针异常 - 迭代 FastMap 值

标签 java collections dictionary

我需要迭代 FastMap.values。 我的问题是基本循环因 NullPointerException 而失败

基本循环

Collection<Order> orders = myObject.getOpenOrders();
    for (Order order : orders) {
}

问题是我系统中的另一个线程编辑了快速 map 它正在向其中添加和删除元素,我得到 NullPointerException。 很少,但应该解决。

所以我添加了空检查

Collection<Order> orders = myObject.getOpenOrders();
   for (Order order : orders) {
        if (order != null ) 
   }

但我仍然得到 NullPointerExcetion 所以我尝试按如下方式迭代它

    FastMap<String, Order> openOrders = myObject.getOpenOrdersMap();
    for (FastMap.Entry<String, Order> e = openOrders.head(), end = openOrders.tail(); (e = e.getNext()) != end && e != null;) {
        Order order = e.getValue();
    }

但是当它达到 null 时循环就会停止,而不是抛出 NullPointerExcetion。 这也是一个问题,因为我需要迭代所有元素。

我认为问题是 for 迭代使用了values(),它实际上是一个指向列表的指针。 我尝试复制列表,但在复制过程中我也得到 NullPointerExcetion 。 任何建议

顺便说一句:我知道改变整个设计是最好的解决方案,并在每次插入和读取中使用锁。但是我可以做一些较小的改变来解决我的问题吗?
任何想法?

最佳答案

这不是JDK的类吗? (贾瓦解?) 据医生所说:

If the map is marked shared then all operations are thread-safe including iterations over the map's collections

那么您可能会遇到一些并发问题? 尝试一下:

FastMap<String, Order> openOrders = myObject.getOpenOrdersMap().shared()

关于java - 空指针异常 - 迭代 FastMap 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175844/

相关文章:

Java 8 流并从调用 boolean 方法设置属性

java - 使用 Java 将一组月份转换为几天

java - 使用 Java 从本地驱动器将 JSON 文件上传到 BigQuery

java - 如何读取java中字符之间的多个标记?

java - 过滤列表的最佳方法是什么?

java - 为数组实现撤销和重做

java - 无法在 AMD 64 位平台上加载 IA 32 位 .dll

python - 返回一个字典,其中不同的单词作为键,它在文本中的出现位置作为值

c# - 覆盖 Dictionary<K,V>.KeyCollection

arrays - 带有字符串数组的 Swift 字典删除值