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

时间:2015-04-20 21:30:34

标签: 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;
        });
    }
}

我有这个代码,我希望我能看到&#34; Short&#34;,&#34; lululu&#34; &#34; ABCahahahha&#34;被打印出来了。 但是我没有看到他们。我的代码有什么问题? 编译很好。我正在使用java 8编译器和运行时。

3 个答案:

答案 0 :(得分:6)

您没有使用您的信息流的任何终端操作。没有任何反应。 map()是一个中间操作,不应该有副作用。你的代码应该是什么

queue.stream().forEach(s-> {
    System.out.println("queue: "+ s);
});

答案 1 :(得分:5)

map()方法本身是中间并且不会强制使用Stream,所以放置一边是一个非常糟糕的主意那里的影响。

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

queue.stream()
  .forEach(s -> System.out.println("queue: " + s));

答案 2 :(得分:3)

非终端操作没有进行任何处理。它只是终端操作,开始处理所有非终端操作,最后终端操作。