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