没有公共 API 方法可以“解包”StreamEx
流。这是故意的。一般来说,StreamEx
该类与原始Stream
API 兼容,因此如果您需要传递StreamEx
一些接受 simple 的代码Stream
,您可以毫无顾忌地做到这一点。
使用的开销StreamEx
通常非常低:每个流步骤只有一个或几个额外的调用(其中一些可以被 JIT 编译器消除)。这种开销(如果没有被 JIT 消除)仅在流创建期间出现,而不是在评估期间出现,因此它不依赖于流中元素的数量。发生终端操作时,处理将移交给原始流,因此在您的示例中map
和forEach
评估期间不会运行 StreamEx 库代码。
如果您创建许多简单的短流,StreamEx
开销可能会有些显着。例如,如果您StreamEx
在flatMap
. 因此,在这种情况下,如果性能很重要并且您不需要StreamEx
嵌套的特定操作,Stream
那么避免StreamEx
在flatMap
. 尽管根据我的测试,差异仅在非常人为的情况下才变得显着(例如,超过 5%)。
请注意,StreamEx
与 Stream API 等效项相比,某些操作进行了优化。例如,StreamEx.toList()
通常比 快Stream.collect(Collectors.toList())
。与. StreamEx.of(persons).map(Person::getName).toList()
_persons.stream().map(Person::getName).collect(Collectors.toList())