Java8如何将Array转换为Stream的实现代码
程序员文章站
2023-11-09 14:23:22
引言
在 java8 中,您可以使用 arrays.stream 或 stream.of 将 array 转换为 stream。
1. 对象数组
对于对象数组...
引言
在 java8 中,您可以使用 arrays.stream 或 stream.of 将 array 转换为 stream。
1. 对象数组
对于对象数组,arrays.stream 和 stream.of 都返回相同的输出。
public static void main(string[] args) { objectarrays(); } private static void objectarrays() { string[] array = {"a", "b", "c", "d", "e"}; //arrays.stream stream<string> stream = arrays.stream(array); stream.foreach(x-> system.out.println(x)); system.out.println("======"); //stream.of stream<string> 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 public static <t> stream<t> stream(t[] array) { return stream(array, 0, array.length); } // stream public static<t> stream<t> of(t... values) { return arrays.stream(values); }
2. 基本数组
对于基本数组,arrays.stream 和 stream.of 将返回不同的输出。
public static void main(string[] args) { primitivearrays(); } private static void primitivearrays() { int[] intarray = {1, 2, 3, 4, 5}; // 1. arrays.stream -> intstream intstream stream = arrays.stream(intarray); stream.foreach(x->system.out.println(x)); system.out.println("======"); // 2. stream.of -> stream<int[]> stream<int[]> temp = stream.of(intarray); // 不能直接输出,需要先转换为 intstream intstream intstream = temp.flatmaptoint(x -> arrays.stream(x)); intstream.foreach(x-> system.out.println(x)); }
输出:
1
2
3
4
5
======
1
2
3
4
5
查看源码,
// arrays public static intstream stream(int[] array) { return stream(array, 0, array.length); } // stream public static<t> stream<t> of(t t) { return streamsupport.stream(new streams.streambuilderimpl<>(t), false); }
which one
- 对于对象数组,两者都调用相同的 arrays.stream 方法
- 对于基本数组,我更喜欢 arrays.stream,因为它返回固定的大小 intstream,更容易操作。
所以,推荐使用 arrays.stream,不需要考虑是对象数组还是基本数组,直接返回对应的流对象,操作方便。
源码见:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。