【发布时间】:2018-06-04 07:37:55
【问题描述】:
假设我有一个队列,我想用尽它。我会这样做的方式类似于
void emptyQueue(Queue<T> q) {
T i;
while ((i = q.poll()) != null)
consume(i);
}
但这感觉像是一种古老的方法。
我想要更像forEach 方法的东西。当然,它是存在的 - Queue 是 Collection - 但它迭代元素,而不是消耗它们。
理想情况下,我希望在 Queue 上使用 pollEach 方法 - 但我似乎找不到任何合适的方法。
这种代码你是怎么写的?
【问题讨论】:
-
您确实将消费者添加到
forEach...q.forEach(this::consume);应该等同于您的代码。 -
@daniu 不会在元素被消耗时从队列中删除。
-
您可以将
while更改为:for(T ti= null; (i = queue.poll()) != null; ){...},这可能会更好一些,因为i变量仅在for 范围内可用 -
如果您的队列继承自
AbstractQueue,您可以简单地使用clear()方法。