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

java 8 forEach关闭流时的奇怪行为[重复]

徐阳炎
2023-03-14
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
        stream.forEach((e) -> {
            System.out.println("inside for Each");
            if(e == 3) {
                stream.close();
            } else {
                System.out.println(e);
            }
        });
inside for Each  
1  
inside for Each  
2  
inside for Each  
inside for Each
1
inside for Each
2
inside for Each
inside for Each
4
inside for Each
5

共有1个答案

汪同
2023-03-14

来自流的javadoc

流有一个baseStream.Close()方法并实现AutoCloseable,但是几乎所有的流实例在使用后实际上都不需要关闭。通常,只有源是IO通道的流(例如由files.lines(Path,Charset)返回的流)才需要关闭。大多数流由集合、数组或生成函数支持,它们不需要特殊的资源管理。(如果流确实需要关闭,可以在try-with-resources语句中将其声明为资源。)

即使源是IO通道,在forEach中关闭它也不是使用流的方式。

 类似资料:
  • 问题内容: 我有以下简单代码: 正如我的python知识所期望的那样,输出为3-整个列表将包含的最后一个值。但是,这在内部如何运作? AFAIK,python变量只是对对象的引用,因此第一个闭包必须包含对象的第一个引用-并且此对象肯定是1,而不是3 O_O。python闭包如何将变量本身而不是对象作为变量引用的对象?它是否将变量名另存为纯文本,一些“对变量的引用”或什么? 问题答案: 闭包不是指

  • 通常,具有固定参数数的方法优于具有可变参数数的重载方法。但是,该示例的行为不同: 输出: main的第三行用一个参数调用该方法,该参数是一个包含两个元素的字符串[]。但这并不是用一个参数执行方法,而是执行varargs方法,就像我给了它两个参数一样(这有点正常,因为它是一个数组)。 现在的问题是:这应该发生吗?我是否发现了错误或未记录的行为?它这样做的原因是什么? 我为什么这么做:我想做一个快捷方

  • null 结果将是0xFFFFFFFFFFFFFFFF0000(正确,寄存器溢出,但我们只更改2字节) 结果将为0x00000000000000000000(WTF?,寄存器溢出,但结果更改所有8个字节而不是4个字节。为什么是0x00000000000000,而不是0xFFFFFF00000000)

  • 我看到一个奇怪的行为与ImageIO. read()方法。 我将InputStream传递给这个方法,当我第二次尝试读取它时,它无法读取并返回null。 我试图上传图像到亚马逊S3,我想创建3个版本的图像。原始和2缩略图。我的问题是,当我想创建2个缩略图时,我需要使用ImageIO. read()读取输入流。如果我运行这个方法2相同的InputStream我得到null为第二次读取。 我可以通过只

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 我正在使用Mapstruct映射将一个POJO转换为另一个POJO模型 以下是mapstruct自动生成的方法 该方法基本上获取源POJO的映射,并将其转换为目标模型的映射。生成正在通过。 当我运行代码时,我在这个方法中得到了ClassCast异常:HeaderAttributeGenericDataTypeMaptoStringEnergiectAttributeDataMap 堆栈跟踪: 我还