java - 更新存储在阻塞优先级队列中的自定义对象

标签 java blockingqueue

我有一个阻塞优先级队列,它存储消息类型的对象,消息有 String[] data = new String[10]。现在我必须迭代整个阻塞队列,检查其对象消息的第二个元素是否等于传入消息的第六个元素。

消息的比较器不是基于需要更新的第6个元素。问题是,如果我取出一个对象,那么如何将它放在相同的位置,如果我使用下面的代码来更新它,那么每当运行 iter.next() 时,它可能会开始指向下一个对象。

这就是我正在尝试的。

public synchronized void updateAck(Message ackMessage)
    {
        Iterator iter  = localQ.iterator(); // localQ is the blocking priority queue here
        while(iter.hasNext())
        {
            if(((Message)iter.next()).data[2].equalsIgnoreCase(ackMessage.data[6]))
            {
                (Integer.parseInt((Message)iter.next()).data[6])+1);

            }
        }
    }

最佳答案

不要在 if 条件中直接使用 (Message)iter.next(),而是尝试这样做。

Message queMessage = (Message)iter.next();

完整代码

 while(iter.hasNext())
{

    Message queMessage = (Message)iter.next(); //you will be invoking .next() only once

     if(queMessage.data[2].equalsIgnoreCase(ackMessage.data[6]))
     {
          (Integer.parseInt(queMessage.data[6])+1);

     }
}

关于java - 更新存储在阻塞优先级队列中的自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508983/

相关文章:

c++ - C++11 中有并发容器吗?

java - 等待多个阻塞队列

java - 使用 Java SDK 进行 Azure Cosmos DB Gremlin/Tinkerpop token 身份验证

java - 带有 Iterable 的方法签名中的省略行为 (...)?

java - 用objective-c在java中模拟接口(interface)

java - 如何与消耗整个队列的消费者保持阻塞队列的同步

java - 使用 B4j 创建字节数组条形码

java - 在静态方法中获取实际泛型类型的类对象

带有批处理的 Java BlockingQueue?

java - 同步BlockingQueues的ArrayList