我需要迭代 FastMap.values。我的问题是基本循环失败了 NullPointerException
基本循环
Collection<Order> orders = myObject.getOpenOrders();
for (Order order : orders) {
}
问题是我系统中的另一个线程编辑了快速映射它正在向它添加和删除元素,我得到 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。任何建议
顺便说一句:我知道改变整个设计是最好的解决方案,并且在每次插入和读取时都使用锁。但是我可以做一些较小的改变来解决我的问题吗?
任何的想法?