gpt4 book ai didi

Java 8 - 异常关闭流?

转载 作者:搜寻专家 更新时间:2023-11-01 01:25:55 26 4
gpt4 key购买 nike

如果在调用构建的流链的任何元素期间发生异常,是否有关闭 Stream 的方法?

例如代码:

    Stream.of(new Object())
.filter(e -> {
if (true) throw new IllegalStateException();
return true;
})
.onClose(() -> System.out.println("OnClose"))
.collect(Collectors.toList());

将产生以下输出:

Exception in thread "main" java.lang.IllegalStateException
at my.className.lambda$main$2(LdapRealm.java:114)
at my.className$$Lambda$1/1607521710.test(Unknown Source)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:419)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at my.className.main(LdapRealm.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

请注意,由于尚未调用 onClose(),因此未打印“OnClose”消息。如果我想让这个流被第三方代码使用,我不确定这个代码是否会促进 try/catch+Autocloseable 是否有什么好的解决方案特征?

最佳答案

如果您类(class)的用户不使用 try/finally 或 try-with-resources,您绝对不能做任何清理工作。 (终结器除外,这不是一个好的解决方案。)

如果你有一个返回流的函数

Stream<Object> getStream() {
return Stream.of(new Object())
.filter(e -> {
if (true) throw new IllegalStateException();
return true;
})
.onClose(() -> System.out.println("OnClose"));
}

那么这个函数的正确用法是

List<Object> result;
try (Stream<Object> s = getStream()) {
result = s.collect(Collectors.toList());
}

关于Java 8 - 异常关闭流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com