Tom*_*mas 5 java integer java-8 java-stream
这两种流创建方法之间是否存在任何显着差异(性能或最佳实践)?
int[] arr2 = {1,2,3,4,5,6};
Arrays.stream(arr2)
.map((in)->in*2)
.mapToObj((in) -> new Integer(in))
.collect(Collectors.toCollection(()-> new ArrayList<>()));
Arrays.stream(arr2)
.map(in->in*2)
.boxed()
.collect(Collectors.toCollection(()-> new ArrayList<>()));
Run Code Online (Sandbox Code Playgroud)
感谢Stack Community的答案,我可以为新读者添加一些问题完整性的插件:
正如许多人所指出的,.boxed()
IntStream方法定义为:
@Override
public final Stream<Integer> boxed() {
return mapToObj(Integer::valueOf);
}
Run Code Online (Sandbox Code Playgroud)
什么基本上重新定义了以下哪一个更好的问题:
.mapToObj(in -> new Integer(in))
Run Code Online (Sandbox Code Playgroud)
要么
.mapToObj(in -> Integer.valueOf(in))
Run Code Online (Sandbox Code Playgroud)
是的,boxed()
用于从缓存中Integer.valueOf
检索某些Integer
实例的用途.
所以你应该使用boxed()
(最好)版本,或使用Integer.valueOf
而不是new Integer()
.请注意,这boxed()
实际上是简写mapToObj(Integer::valueOf)
.
第二个更好,因为Integer
在此示例中它不创建任何对象。
如果要装箱的值p是-128至127(含)之间的int ...,则令r1和r2是p的任何两次装箱转换的结果。r1 == r2总是这样。
一般来说,您不应调用new
包装器类型,而应使用其static
工厂方法-例如Integer.valueOf
归档时间: |
|
查看次数: |
183 次 |
最近记录: |