在网上搜了一下。
对于对象数组/列表,两个方法都调用了 Arrays.stream :
Integer[] array = { 1, 2, 3, 4, 5 };
Stream.of(array)// return Stream
.forEach(System.out::println); // prints 1, 2, 3, ...
Integer[] array = { 1, 2, 3, 4, 5 };
Arrays.stream(array)// return Stream
.forEach(System.out::println); // prints 1, 2, 3, ...
对于原始数据的数组/列表,两个方法会返回不同的结果:
int[] array = { 1, 2, 3, 4, 5 };
Arrays.stream(array)// returns IntStream
.forEach(System.out::println); // prints 1, 2, 3, ...
int[] array = { 1, 2, 3, 4, 5 };
Stream.of(array)// returns Stream
.forEach(System.out::println); // prints [I@27d6c5e0
然而,实现相同结果的时候,我发现 Stream.of 的运行速度更快一些,求大佬解释一下,并说明你平时选用哪个进行转换。示例如下,目的是将一个String[] 转为 Integer[]:
@Test
public void streamStringsToIntegers() {
String str = "1,2,3,8,9,125,12";
System.out.println("*****************************************");
System.out.println(System.currentTimeMillis());
System.out.println(Arrays.toString(Arrays.stream(str.split(",")).map(Integer::parseInt).toArray(Integer[]::new)));
System.out.println(System.currentTimeMillis());
System.out.println("+++++++++++++++++++++++++++++++++++++++++");
System.out.println(System.currentTimeMillis());
System.out.println(Arrays.toString(Stream.of(str.split(",")).map(Integer::parseInt).toArray(Integer[]::new)));
System.out.println(System.currentTimeMillis());
}
结果,明显后者(Stream.of)所需时间更短:
*****************************************
1548322968304
[1, 2, 3, 8, 9, 125, 12]
1548322968314
+++++++++++++++++++++++++++++++++++++++++
1548322968314
[1, 2, 3, 8, 9, 125, 12]
1548322968316