Java 8 为什么Java8流什么都不生成? import java.util.Comparator; 导入java.util.PriorityQueue; 公共类TestPQ{ 公共静态void main(字符串[]args){ 比较器比较器=新StringLength比较器(); PriorityQueue=新的PriorityQueue(10,比较器); 报价(简称“短”); 排队。报价(“ABCAHAHAHA”); 排队。报价(“卢卢卢”); queue.stream().map(s->{ System.out.println(“队列:+s”); 返回s; }); } }
我有这个代码,我希望我会看到“Short”、“lululu”和“abcahahaha”被打印出来。 但我没有看到他们。我的代码怎么了?Java 8 为什么Java8流什么都不生成? import java.util.Comparator; 导入java.util.PriorityQueue; 公共类TestPQ{ 公共静态void main(字符串[]args){ 比较器比较器=新StringLength比较器(); PriorityQueue=新的PriorityQueue(10,比较器); 报价(简称“短”); 排队。报价(“ABCAHAHAHA”); 排队。报价(“卢卢卢”); queue.stream().map(s->{ System.out.println(“队列:+s”); 返回s; }); } },java-8,java-stream,Java 8,Java Stream,我有这个代码,我希望我会看到“Short”、“lululu”和“abcahahaha”被打印出来。 但我没有看到他们。我的代码怎么了? 编译很好。我正在使用java 8编译器和运行时。您没有任何终端操作使用您的流。所以什么也没发生map()是一种中间操作,不应有副作用。你的代码应该是什么 import java.util.Comparator; import java.util.PriorityQueue; public class TestPQ { public static vo
编译很好。我正在使用java 8编译器和运行时。您没有任何终端操作使用您的流。所以什么也没发生
map()
是一种中间操作,不应有副作用。你的代码应该是什么
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;
});
}
}
您没有任何终端操作消耗您的流。所以什么也没发生
map()
是一种中间操作,不应有副作用。你的代码应该是什么
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;
});
}
}
map()方法本身是中间的,不强制使用流
,因此在那里放置副作用是一个非常糟糕的主意
在这种情况下,应使用专用的forEach()方法:
map()方法本身是中间的,不强制使用流
,因此在那里放置副作用是一个非常糟糕的主意
在这种情况下,应使用专用的forEach()方法:
非终端操作未进行任何处理。它只是终端操作,开始处理所有非终端操作,最后是终端操作。非终端操作不做任何处理。它只是终端操作,开始处理所有非终端操作,最后是终端操作。请记住
queue.stream()
不会按排序顺序生成PriorityQueue
内容。请记住queue.stream()
不会按排序顺序生成PriorityQueue
内容。
queue.stream()
.forEach(s -> System.out.println("queue: " + s));