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

标签 java java-8 queue

假设我有一个队列,我想用尽它。我会这样做的方式是类似

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/

相关文章:

javascript - 如何在 JavaScript 中实现堆栈和队列?

java - 从中删除单词后重新格式化字符串

java - 如何只替换数字后面的双引号?

java - 如何使用 Java 8 Streams 打印数组列表(带元素)?

java - 如何优雅且安全地最大化分配给 Kubernetes 中的 Java 应用程序的堆空间量?

java - 阻塞队列、单个生产者-多个消费者同步问题

php - Laravel 队列推送监听器——队列监控

Java绘图应用程序

java - 房间+实时数据调试

character-encoding - 为什么 JDK8 的 Base64 使用 ISO-8859-1?