非干扰运算符不显示其内容

请您告诉我 peek 操作符不显示 system.out.print 的原因吗?


代码:


public static void main(String[] args) {

    //try stream.of

    List<Integer> numbers = Arrays.asList(0,1,2,3,4,5,6,7,8);

     Stream<Integer> p = numbers

    .stream()

    .filter(x -> x >= 5)

    .peek(x-> System.out.print("peek at: " + x));


     System.out.print("peek at: ");

}


蝴蝶不菲
浏览 137回答 3
3回答

皈依舞

peek()是不触发流处理管道的中间操作。您应该只有一个终端操作来触发流处理管道。流本质上是惰性的,因此如果没有一个终端操作,它就不会被触发。因此,在您的管道中添加一名终端操作员,看看您需要什么。这是一种方法。long matchCount = numbers.stream().filter(x -> x >= 5)&nbsp; &nbsp; .peek(x -> System.out.println("peek at: " + x))&nbsp; &nbsp; .count();

青春有我

引用Stream#peek()的 JavaDoc&nbsp;:返回一个由该流的元素组成的流,另外在每个元素上执行提供的操作,因为元素从结果流中被消耗。这是一个中间操作。有关这方面的更多信息可以在文档中找到。但为了完整起见:中间操作返回一个新的流。他们总是很懒惰;执行诸如 filter() 之类的中间操作实际上并不执行任何过滤,而是创建一个新流,该流在遍历时包含与给定谓词匹配的初始流的元素。管道源的遍历直到管道的终端操作被执行后才开始。

慕哥6287543

&nbsp; &nbsp; 如上所述,流是惰性的。这意味着没有终止操作就不会开始计算。你可以forEach()在你的例子中使用。替换peek为forEach将开始计算:&nbsp; &nbsp; &nbsp;List<Integer> numbers = Arrays.asList(0,1,2,3,4,5,6,7,8);&nbsp; &nbsp; &nbsp;numbers&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(x -> x >= 5)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .forEach(x-> System.out.print("x: " + x));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java