为什么Java8 Stream什么都不生成?

Buf*_*lls 5 java-8 java-stream

import java.util.Comparator;
import java.util.PriorityQueue;


public class TestPQ {
    public static void main(String[] args){
        Comparator<String> comparator = new StringLengthComparator();
        PriorityQueue<String> queue = new PriorityQueue<String>(10, comparator);
        queue.offer("Short");
        queue.offer("ABCahahahha");
        queue.offer("lululu");
        queue.stream().map( s-> {
            System.out.println("queue: "+ s);
            return s;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我有这个代码,我希望我会看到"短片","lululu"和"ABCahahahha"被打印出来.但我没有看到他们.我的代码出了什么问题?编译很好.我正在使用java 8编译器和运行时.

JB *_*zet 6

您没有任何终端操作消耗您的流.没有任何反应.map()是一种中间操作,不应该有副作用.你的代码应该是什么

queue.stream().forEach(s-> {
    System.out.println("queue: "+ s);
});
Run Code Online (Sandbox Code Playgroud)


Grz*_*rek 5

图()方法本身中间并没有强制的消费Stream所以这是一个非常糟糕的主意,把副作用出现.

在这种情况下,您应该使用专用的forEach()方法:

queue.stream()
  .forEach(s -> System.out.println("queue: " + s));
Run Code Online (Sandbox Code Playgroud)