每个函数后的Java流连接

每个函数后的Java流连接,java,java-8,java-stream,Java,Java 8,Java Stream,当我们使用Stream.concat连接流时,是否可以在流通过时运行函数 e、 g 我正在使用files.lines从多个文件创建流。现在,每当文件被完全读取时,我都需要将其删除。您是否尝试使用Stream.onClose()。例如Stream.concat().onClose()您是否尝试使用Stream.onClose()。与Stream.concat().onClose()类似,通过Stream.concat组成的流的关闭处理程序在结果流关闭时执行。请注意,关闭处理程序通常要求使用流的代码

当我们使用
Stream.concat
连接流时,是否可以在流通过时运行函数

e、 g


我正在使用
files.lines
从多个文件创建流。现在,每当文件被完全读取时,我都需要将其删除。

您是否尝试使用Stream.onClose()。例如Stream.concat().onClose()

您是否尝试使用Stream.onClose()。与Stream.concat().onClose()类似,通过
Stream.concat组成的流的关闭处理程序在结果流关闭时执行。请注意,关闭处理程序通常要求使用流的代码关闭流,例如

try(Stream<String> s=Stream.concat(Files.lines(path1), Files.lines(path2))) {
    s.forEach(System.out::println);
}

为了证明差异

try(Stream<String> s=Stream.concat(
        Stream.of("foo").onClose(()->System.out.println("foo closed")),
        Stream.of("bar").onClose(()->System.out.println("bar closed")) )) {
    s.forEach(System.out::println);
}
鉴于

Stream.of("foo", "bar")
    .flatMap(x -> Stream.of(x).onClose(()->System.out.println(x+" closed")) )
    .forEach(System.out::println);
将打印

foo
富关
酒吧
酒吧关门

通过
stream.concat组成的流的关闭处理程序在结果流关闭时执行。请注意,关闭处理程序通常要求使用流的代码关闭流,例如

try(Stream<String> s=Stream.concat(Files.lines(path1), Files.lines(path2))) {
    s.forEach(System.out::println);
}

为了证明差异

try(Stream<String> s=Stream.concat(
        Stream.of("foo").onClose(()->System.out.println("foo closed")),
        Stream.of("bar").onClose(()->System.out.println("bar closed")) )) {
    s.forEach(System.out::println);
}
鉴于

Stream.of("foo", "bar")
    .flatMap(x -> Stream.of(x).onClose(()->System.out.println(x+" closed")) )
    .forEach(System.out::println);
将打印

foo
富关
酒吧
酒吧关门

在连接之前只在原始流上运行它?请给出一个例子,我不理解您的“每当流结束”让我解释一下我的用例“结束”是什么意思?更新了问题在连接之前只在原始流上运行它?请给出一个例子,我不理解您的“每当溪流过去“让我来解释一下我的用例‘克服’是什么意思?更新了问题runnable没有运行somehow@RishiSarafonClose在这里是另一回事,它不会工作。runnable没有运行somehow@RishiSaraf一旦关闭在这里是另一回事,它将不起作用。关于flatMap的建议太棒了+1关于flatMap的建议太棒了+1.