说我有队列,我想用尽它。我这样做的方式就像
void emptyQueue(Queue<T> q) {
T i;
while ((i = q.poll()) != null)
consume(i);
}
但这感觉就像一种古老的方法。
我想要更像forEach
方法的东西。它当然是存在的 - Queue
是Collection
- 但它迭代元素,而不是消耗它们。
理想情况下,我希望在pollEach
上使用Queue
方法 - 但我似乎找不到任何合适的方法。
你怎么写这种代码?
答案 0 :(得分:5)
您可以使用自己的生成器在队列中调用poll()
:
Stream.generate( () -> q.poll() )
.takeWhile(Objects::nonNull) //Note that this is only available in java 9
.forEach(i -> consume(i));
此方法也是控制传递流的内容的一个示例。您可以管理诸如阻止等内容。本例中的takeWhile
步骤仅显示如何检测数据的结尾。