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 为什么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

我有这个代码,我希望我会看到“Short”、“lululu”和“abcahahaha”被打印出来。 但我没有看到他们。我的代码怎么了?
编译很好。我正在使用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));