jac*_*646 5 java overloading variadic-functions java-stream spliterator
该流接口有两个重载方法of().其中一个是变量方法,而另一个是一个参数.
单参数方法是一种性能优化,而不是将一个参数传递给变量方法?如果是这样,它如何提高性能?可以问这个empty()方法的相同问题,这似乎是围绕变量的语法糖of().
我看到这些方法的实现方式不同,显然差别在于如何Spliterator实例化; 但这为StreamAPI 提供了什么优势?
空流和单个元素流是非常常见的用例,尤其是当您使用时.flatMap().例如,这里是如何Optional.stream()被实现在Java的9:
public Stream<T> stream() {
if (!isPresent()) {
return Stream.empty();
} else {
return Stream.of(value);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,鉴于Optionals流,您可以通过以下方式将它们打包到平面流中:
streamOfOptionals.flatMap(Optional::stream);
Run Code Online (Sandbox Code Playgroud)
在这里,您可以创建大量的空流以及单个元素流,因此优化此类情况看起来非常合理.特别是,Stream.empty()与Stream.of()不创建空数组并且不创建spliterator(它重用相同的spliterator实例)不同.Stream.of(T)在内部也特别优化StreamBuilderImpl,因此没有为单个元素分配数组.
是的,这是一个优化,以避免创建一个数组只包含一个元素的开销,这是你使用varargs版本时得到的.
可以询问empty()方法的相同问题,这似乎是围绕变量arity()的语法糖
你在看什么实现版本?当我看到实现时,我没有看到这一点.
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |