假设我有一个队列,我想用尽它。我会这样做的方式是类似
void emptyQueue(Queue<T> q) {
T i;
while ((i = q.poll()) != null)
consume(i);
}
但这感觉像是一种过时的方法。
我想要更像 forEach
方法的东西。它当然存在 - Queue
是一个 Collection
- 但它迭代元素,而不是消耗它们。
理想情况下,我希望 Queue
上有一个 pollEach
方法 - 但我似乎找不到任何合适的方法。
这种代码怎么写?
最佳答案
您可以使用自己的生成器在队列上调用 poll()
:
Stream.generate( () -> q.poll() )
.takeWhile(Objects::nonNull) //Note that this is only available in java 9
.forEach(i -> consume(i));
此方法也是控制通过流的内容的示例。您可以管理阻塞等事情。本例中的 takeWhile
步骤仅显示如何检测数据结束。
关于java - 在 Java 8 中耗尽队列的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675537/