首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将StreamEx解压缩为“普通的旧Java流”?

如何将StreamEx解压缩为“普通的旧Java流”?
EN

Stack Overflow用户
提问于 2015-11-23 14:24:02
回答 1查看 967关注 0票数 3

StreamEx是一个强大的库,但在某种程度上,我不再需要它的超级能力了。

我如何才能摆脱StreamEx内部开销?这会造成问题吗?

例如。

代码语言:javascript
复制
public void process(Path path){
    StreamEx.of(Files.lines(path))
        .groupRuns(...)
        //See below 
        .unwrap()
        //
        .map(...)
        .forEach(...)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-23 16:06:10

没有公共API方法来“解包”StreamEx流。这是故意的。通常,StreamEx类与原始的Stream API兼容,所以如果需要将StreamEx传递给一些接受简单Stream的代码,您可以毫不担心地这样做。

使用StreamEx的开销通常很低:每个流步骤只有一个或几个额外的调用(其中一些可以被JIT编译器消除)。这种开销(如果不是JIT消除的话)只出现在流创建期间,而不是在评估期间,因此它不依赖于流中的元素数。当终端操作发生时,处理将被移交给原始流,因此在您的示例中,在mapforEach评估期间,不会运行StreamEx库代码。

如果您创建了许多简单的短流,那么StreamEx开销可能会比较大。例如,如果在StreamEx中创建flatMap实例。因此,在这种情况下,如果性能很重要,并且不需要嵌套Stream的特定Stream操作,那么在flatMap中避免使用StreamEx可能是个好主意。虽然根据我的测试,差别很大(比方说,超过5%)只是在非常人为的情况下。

请注意,与Stream等价物相比,某些StreamEx操作是经过优化的。例如,StreamEx.toList()通常比Stream.collect(Collectors.toList())快。像StreamEx.of(persons).map(Person::getName).toList()这样简单的创建地图收集操作可以比persons.stream().map(Person::getName).collect(Collectors.toList())快几倍。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33873345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档