Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将StreamEx展开为“a”;普通旧Java流“;?_Java_Java 8_Java Stream_Streamex - Fatal编程技术网

如何将StreamEx展开为“a”;普通旧Java流“;?

如何将StreamEx展开为“a”;普通旧Java流“;?,java,java-8,java-stream,streamex,Java,Java 8,Java Stream,Streamex,StreamEx是一个功能强大的库,但在某种程度上我不再需要它的超级功能了 如何消除StreamEx内部开销?这会造成问题吗 前 没有公共API方法来“展开”流。这是故意的。一般来说,streamx类与原始的StreamAPI兼容,因此如果需要将streamx传递给一些接受简单Stream的代码,您可以毫不畏惧地执行此操作 使用StreamEx的开销通常很低:每个流步骤只有一个或多个额外调用(其中一些可以通过JIT编译器消除)。这种开销(如果JIT没有消除的话)只在流创建期间出现,而不是在计算期

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

如何消除StreamEx内部开销?这会造成问题吗


没有公共API方法来“展开”流。这是故意的。一般来说,
streamx
类与原始的
Stream
API兼容,因此如果需要将
streamx
传递给一些接受简单
Stream
的代码,您可以毫不畏惧地执行此操作

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

如果您创建了许多简单的短流,
StreamEx
开销可能会有点大。例如,如果在
flatMap
中创建
StreamEx
实例。因此,在这种情况下,如果性能很重要,并且嵌套的
不需要特定的
streamx
操作,那么最好避免
平面图
中的
streamx
。尽管根据我的测试,只有在非常人为的情况下,差异才会变得显著(比如超过5%)


请注意,与Stream API等价物相比,一些
StreamEx
操作得到了优化。例如,
StreamEx.toList()
通常比
Stream.collect(Collectors.toList())
快。简单的创建映射收集操作,如
StreamEx.of(persons).map(Person::getName).toList()
可以比
persons.stream().map(Person::getName).collector(Collectors.toList())
快几倍,
StreamEx
是一个
,标准操作委托给
,因此几乎没有开销(除了创建一个或多个对象)。我会让它的作者给出一个恰当的答案:)。
public void process(Path path){
    StreamEx.of(Files.lines(path))
        .groupRuns(...)
        //See below 
        .unwrap()
        //
        .map(...)
        .forEach(...)
}