没有公共 API 方法可以“解包”StreamEx流。这是故意的。一般来说,StreamEx该类与原始StreamAPI 兼容,因此如果您需要传递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())