【发布时间】:2013-07-25 03:10:02
【问题描述】:
我正在使用BlockingQueue,并且希望能够查看队列中的下一个元素。 Queue.peek() 给了我第一个下一个元素,但我需要更深入。
是否有标准方法,或者我应该自己实现(包括处理线程安全问题)?
【问题讨论】:
我正在使用BlockingQueue,并且希望能够查看队列中的下一个元素。 Queue.peek() 给了我第一个下一个元素,但我需要更深入。
是否有标准方法,或者我应该自己实现(包括处理线程安全问题)?
【问题讨论】:
queue.stream().peek(e -> System.out.println(e));
在遍历的同时,你可以对每个元素做一些事情,然后构建你自己的元素。
System.out.println(Stream.of("one", "two", "three", "four")
.filter(e -> e.length() > 3)
.peek(e -> System.out.println("After Filter: " + e))
.map(String::toUpperCase)
.peek(e -> System.out.println("After Mapped value: " + e))
.collect(Collectors.toList()));
After Filter: three
After Mapping: THREE
After Filter: four
After Mapping: FOUR
[THREE, FOUR]
或
Queue<Boolean> qq = new ArrayBlockingQueue<>(10);
for(Boolean element : qq) {
System.out.println(element);
}
【讨论】:
了解您正在使用的数据结构及其用途。
您可以通过不同的数据结构来完成相同的工作,例如 [List,Set,Array,Vector,Stack,Queue 等]。但每个人都有自己的特点。
队列用于先进先出,您以相同的方式访问元素,要访问下一个元素,应将第一个元素移出它。
【讨论】:
BlockingQueue,因为这是它的主要功能。有时我需要查看队列内容,而不会损害take() 的其他线程。有什么建议吗?
为此使用 while lopp
while ((value=q.poll())!=null)
System.out.println(value);
}
【讨论】: