这两种流创建方法在性能或最佳实践方面有显著差异吗?
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<>()));
编辑
感谢Stack社区的回答,我可以为新读者添加一些问题完整性的插件:
正如许多人指出的那样,.boxed()
IntStream方法定义如下:
@Override
public final Stream<Integer> boxed() {
return mapToObj(Integer::valueOf);
}
基本上重新定义问题,即以下哪个更好:
.mapToObj(in -> new Integer(in))
或者
.mapToObj(in -> Integer.valueOf(in))
.mapToObj((in) -> Integer.valueOf(in*2))
翻译成中文:.mapToObj((in) -> Integer.valueOf(in*2))
的意思是将流中的每个元素乘以2并转换为一个Integer对象。 - Hadi Jnew Integer
,而是使用Integer.valueOf
。此外,请使用Collectors.toList()
。其他部分请编写基准测试。 - NoDataFound