在Java 8中耗尽队列的惯用方法是什么?

时间:2018-06-04 07:37:55

标签: java java-8 queue

说我有队列,我想用尽它。我这样做的方式就像

void emptyQueue(Queue<T> q) {
  T i;
  while ((i = q.poll()) != null)
    consume(i);
}

但这感觉就像一种古老的方法。

我想要更像forEach方法的东西。它当然是存在的 - QueueCollection - 但它迭代元素,而不是消耗它们。

理想情况下,我希望在pollEach上使用Queue方法 - 但我似乎找不到任何合适的方法。

你怎么写这种代码?

1 个答案:

答案 0 :(得分:5)

您可以使用自己的生成器在队列中调用poll()

Stream.generate( () -> q.poll() )
    .takeWhile(Objects::nonNull) //Note that this is only available in java 9
    .forEach(i -> consume(i));

此方法也是控制传递流的内容的一个示例。您可以管理诸如阻止等内容。本例中的takeWhile步骤仅显示如何检测数据的结尾。