우선순위 큐(PriorityQueue)에서 Stream을 사용한다면 우선순위대로 나오는 것이 아닌,
값을 넣은 순서대로 값이 나오는 것을 볼 수 있다.
private static Queue<Integer> createQueue() {
Queue<Integer> queue = new PriorityQueue<>();
queue. offer(10);
queue.add(20);
queue.add(50);
queue.add(30);
queue.add(40);
return queue;
}
private static void for문으로_출력(Queue<Integer> queue) {
System.out.println("\ncase : for문으로 출력");
int size = queue.size();
for (int i = 0; i < size; i++) {
Integer value = queue.poll();
System.out.print("- " + value);
}
System.out.println("\n출력 후 큐의 크기 : " + queue.size());
}
case : for문으로 출력
- 10- 20- 30- 40- 50
출력 후 큐의 크기 : 0
private static void 스트림_출력_기본(Queue<Integer> queue) {
System.out.println("\ncase : stream으로 출력");
queue.stream().forEach(value -> System.out.print("- " + value));
System.out.println("\n출력 후 큐의 크기 : " + queue.size());
}
case : stream으로 출력
- 10- 20- 50- 30- 40
출력 후 큐의 크기 : 5
private static void 이터레이터_출력(Queue<Integer> queue) {
System.out.println("\ncase : iterator로 출력");
Iterator<Integer> iterator = queue.iterator();
while(iterator.hasNext()) {
System.out.print("- " + iterator.next());
}
System.out.println("\n출력 후 큐의 크기 : " + queue.size());
}
case : iterator로 출력
- 10- 20- 50- 30- 40
출력 후 큐의 크기 : 5
The priority order of the PriorityQueue is not preserved when iterating/traversing so, essentially, we need to create our Stream instances ourselves.
PriorityQueue의 정렬이 순회 및 탐색 시 유지가 안되기 때문에, 새로운 스트림을 만들어 주어야 한다.
private static void 스트림_출력_변형_1(Queue<Integer> queue) {
System.out.println("\ncase : stream으로 출력 : poll을 이용하도록 수정");
Stream.generate(queue::poll)
.limit(queue.size())
.forEach(value -> System.out.print("- " + value));
System.out.println("\n출력 후 큐의 크기 : " + queue.size());
}
case : stream으로 출력 : poll을 이용하도록 수정
- 10- 20- 30- 40- 50
출력 후 큐의 크기 : 0
private static void 스트림_출력_변형_2(Queue<Integer> queue) {
System.out.println("\ncase : stream으로 출력 : sort");
Objects.requireNonNull(queue);
queue.stream().sorted()
.forEach(value -> System.out.print("- " + value));
System.out.println("\n출력 후 큐의 크기 : " + queue.size());
}
case : stream으로 출력 : sort
- 10- 20- 30- 40- 50
출력 후 큐의 크기 : 5