当前位置: 首页 > 知识库问答 >
问题:

Java8与Java9中的stream.peek()方法

彭鸿哲
2023-03-14

在IDE上执行程序时,它不会给出任何输出。我原以为它会给出2,4,6

import java.util.Arrays;
import java.util.List;

public class Test_Q3 {

    public Test_Q3() {
    }

    public static void main(String[] args) {
        List<Integer> values = Arrays.asList(1, 2, 3);
        values.stream()
              .map(n -> n * 2)
              .peek(System.out::print)
              .count();
    }
}

共有1个答案

马阳晖
2023-03-14

我假设您是在Java9下运行的?您没有更改流的sized属性,因此根本不需要执行mappeek

换句话说,您只关心count作为最终结果,但同时您不以任何方式(例如通过filterdistinct)更改列表的初始大小这是在流中进行的优化。

顺便说一句,即使您添加了一个虚拟筛选器,它也将显示您所期望的:

values.stream ()
      .map(n -> n*2)
      .peek(System.out::print)
      .filter(x -> true)
      .count();
 类似资料:
  • Edit:是我现在正在做的事情,但是由于只是返回,所以这似乎是对Map的误用。另外,它读起来并不像是商业逻辑。 最后编辑:我接受了@Holger的回答。不能期望处理流上的所有元素,因为它不是终端操作。也是如此。即使您可能已经终止了您的流,以保证它将处理所有操作,您也不应该编写期望每个用户都这样做的代码。因此,要进行处理,您应该在上使用,然后根据需要再次开始对进行流式处理。

  • 问题内容: 我正在学习Java 8 lambda表达式,我想问一下以下与我遇到的函数接口中的方法有关的Java代码。 在IDE上执行程序时,它不输出。我期望它会给。 问题答案: 我假设您正在Java 9下运行它?您没有更改流的属性,因此不需要执行任何一个或全部执行。 换句话说,您关心的只是最终结果,但与此同时,您不以 任何 方式(例如通过或)更改的初始大小。这是在Streams中完成的优化。 顺便

  • 我有一个使用Java Version8的Spring和Maven的项目。当我运行maven update时,它适用于Java9或更高版本,当我编译它时,它适用于Java8。我注意到了这一点,因为用Maven更新会将一个特定的类更改为Java9,而我无法导入这个类。 这个类是:javax.annotation.generated(Java8)。 这是要导入的类。但是,当我进行maven更新时,文件的

  • 根据Java8中的这个链接,为了避免在map()中的冲突,使用平衡树来实现,而不是。 那么,如果: > (和其他映射()都是使用自平衡树实现的,因为最坏情况下的可访问性是相同的 我可以实现如下: 除了排序和可访问性,的其他属性是什么?

  • 与之间的差异: > 它们可能有不同的特点: 这里讨论的似乎是另一个毫无意义的流拆分器特性策略(并行计算似乎更好):深入理解Java8和Java9中的拆分器特性 在本例中,从禁用拆分功能的顺序流创建了一个拆分器(返回null)。当以后需要转换回一个流时,该流不会从并行处理中受益。一种耻辱。 最大的问题是:作为解决办法,在调用之前总是将流转换为并行流会有什么主要影响?

  • 本文向大家介绍Java9中私有方法的注解@SafeVarargs,包括了Java9中私有方法的注解@SafeVarargs的使用技巧和注意事项,需要的朋友参考一下 @SafeVarargs注解是在Java7中引入的。此注解适用于接受varargs参数的final和static方法或构造函数。此注解用于确保方法不会对其varargs参数执行不安全的操作。从Java9开始,@SafeVarargs注解