Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用IO资源装饰源中的流实例_Java_Stream_Java Stream - Fatal编程技术网

Java 如何使用IO资源装饰源中的流实例

Java 如何使用IO资源装饰源中的流实例,java,stream,java-stream,Java,Stream,Java Stream,正如您所知,从IO资源生成的流需要明确地关闭 我希望有一个类来装饰传递的流,但不幸的是,由于过滤器操作是中间的,它们只是创建一个新实例,所以我失去了对关闭的控制 Stream<T> removeNulls(Stream<T> input){ input.filter(Objects::nonNull) //At this point, the returned pointer is a whole different stream which does not b

正如您所知,从IO资源生成的流需要明确地关闭

我希望有一个类来装饰传递的流,但不幸的是,由于过滤器操作是中间的,它们只是创建一个新实例,所以我失去了对关闭的控制

Stream<T> removeNulls(Stream<T> input){
    input.filter(Objects::nonNull) //At this point, the returned pointer is a whole different stream which does not bind closing to the old one
}
Stream removeNulls(流输入){
input.filter(Objects::nonNull)//此时,返回的指针是一个完全不同的流,它不会绑定到旧的流
}
如果有一种方法可以将关闭的过滤流绑定到原始流。。。那么这是可能的

try (Stream<T> myDecoratedStream = MyClass.removeNulls(myRepo.streamAll())){
   myDecoratedStrean....
}
try(Stream myDecoratedStream=MyClass.removeNulls(myRepo.streamAll()){
我的装饰街。。。。
}

似乎
onClose
就是你想要的,比如:

yourStream.filter(....).onClose(SomeRunnable)

你想解决什么实际问题?你在问题中所写的,已经是可能的了。
filter
返回的流可能有也可能没有不同的对象标识,但它将执行与原始流实例相同的关闭操作。