为什么 Java8 Stream 什么都不生成?
Why does Java8 Stream generate nothing?
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;
});
}
}
我有这段代码,我希望看到 "Short"、"lululu" 和 "ABCahahahha" 被打印出来。
但我没有看到他们。我的代码有什么问题?
编译没问题。我正在使用 java 8 编译器和运行时。
您没有任何终端操作消耗您的流。所以什么也没有发生。 map()
是一个中间操作,不应该有副作用。你的代码应该是
queue.stream().forEach(s-> {
System.out.println("queue: "+ s);
});
map() 方法本身是 中间 并且不强制使用 Stream
所以这是一个非常把副作用放在那里是个坏主意。
在这种情况下,您应该使用专用的 forEach() 方法:
queue.stream()
.forEach(s -> System.out.println("queue: " + s));
非终端操作不做任何处理。它只是终端操作,谁开始处理所有非终端操作,然后是终端操作。
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;
});
}
}
我有这段代码,我希望看到 "Short"、"lululu" 和 "ABCahahahha" 被打印出来。 但我没有看到他们。我的代码有什么问题? 编译没问题。我正在使用 java 8 编译器和运行时。
您没有任何终端操作消耗您的流。所以什么也没有发生。 map()
是一个中间操作,不应该有副作用。你的代码应该是
queue.stream().forEach(s-> {
System.out.println("queue: "+ s);
});
map() 方法本身是 中间 并且不强制使用 Stream
所以这是一个非常把副作用放在那里是个坏主意。
在这种情况下,您应该使用专用的 forEach() 方法:
queue.stream()
.forEach(s -> System.out.println("queue: " + s));
非终端操作不做任何处理。它只是终端操作,谁开始处理所有非终端操作,然后是终端操作。