我想知道如何在Java8中对每个映射函数强制立即求值?我现在遇到的情况是,我需要进行多级转换(从ObjectA-> ObjectB-> ObjectC-> ObjectD),并且对于某个对象,此转换的每一级都可能出现故障(抛出异常)。例如
// stream -> map -> collect sequence
lists.stream()
.map(aToB)
.collect(Collectors.toList())
.stream()
.map(bToC)
.collect(Collectors.toList())
.stream()
.map(cToD)
.collect(Collectors.toList())
// Try api is from javaslangs
Function<ObjectA, ObjectB> aToB = a -> Try.of(() -> .....)
.onFailure(....)
.get();
Function<ObjectB, ObjectC> bToC = b -> Try.of(() -> .....)
.onFailure(....)
.get();
Function<ObjectC, ObjectD> cToD = c -> Try.of(() -> .....)
.onFailure(....)
.get();
我想测试单元测试中的每个转换,例如测试是否抛出异常,以及在将A转换为B之类的异常时,如果A未能成功转换为C,但是由于存在延迟评估,因此无法测试,我能想到的唯一方法是执行此一系列steam() -> map(...) -> collect(...)
调用以强制立即进行评估。我想知道是否有更好的方法来编写此代码。
这里有一些简单的想法:
一般来说,不要尝试在测试中处理惰性评估:测试功能,并信任流框架在实际代码中做正确的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句