Java8如何将Array转换为Stream的实现代码
引言
在java8中,您可以使用Arrays.Stream或Stream.of将Array转换为Stream。
1.对象数组
对于对象数组,Arrays.stream和Stream.of都返回相同的输出。
publicstaticvoidmain(String[]args){ ObjectArrays(); } privatestaticvoidObjectArrays(){ String[]array={"a","b","c","d","e"}; //Arrays.stream Streamstream=Arrays.stream(array); stream.forEach(x->System.out.println(x)); System.out.println("======"); //Stream.of Stream stream1=Stream.of(array); stream1.forEach(x->System.out.println(x)); }
输出:
a
b
c
d
e
======
a
b
c
d
e
查看JDK源码,对于对象数组,Stream.of内部调用了Arrays.stream方法。
//Arrays publicstaticStream stream(T[]array){ returnstream(array,0,array.length); } //Stream publicstatic Stream of(T...values){ returnArrays.stream(values); }
2.基本数组
对于基本数组,Arrays.stream和Stream.of将返回不同的输出。
publicstaticvoidmain(String[]args){ PrimitiveArrays(); } privatestaticvoidPrimitiveArrays(){ int[]intArray={1,2,3,4,5}; //1.Arrays.stream->IntStream IntStreamstream=Arrays.stream(intArray); stream.forEach(x->System.out.println(x)); System.out.println("======"); //2.Stream.of->StreamStream temp=Stream.of(intArray); //不能直接输出,需要先转换为IntStream IntStreamintStream=temp.flatMapToInt(x->Arrays.stream(x)); intStream.forEach(x->System.out.println(x)); }
输出:
1
2
3
4
5
======
1
2
3
4
5
查看源码,
//Arrays publicstaticIntStreamstream(int[]array){ returnstream(array,0,array.length); } //Stream publicstaticStream of(Tt){ returnStreamSupport.stream(newStreams.StreamBuilderImpl<>(t),false); }
Whichone
- 对于对象数组,两者都调用相同的Arrays.stream方法
- 对于基本数组,我更喜欢Arrays.stream,因为它返回固定的大小IntStream,更容易操作。
所以,推荐使用Arrays.stream,不需要考虑是对象数组还是基本数组,直接返回对应的流对象,操作方便。
源码见:java-8-demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。