如何将Java 8 Stream转换为数组?
\n\n如果你想要从一个Stream
得到值为1到10的int数组,那么你可以使用IntStream
。
\n这里我们使用Stream.of
方法创建了一个Stream
,并使用mapToInt
将Stream
转换成IntStream
。然后我们可以调用IntStream
的toArray
方法。
\n
Streamstream = Stream.of(1,2,3,4,5,6,7,8,9,10); //or use this to create our stream //Stream stream = IntStream.rangeClosed(1, 10).boxed(); int[] array = stream.mapToInt(x -> x).toArray();
\n同样的事情可以使用仅有IntStream
的方式完成,而不需要Stream
:
\n
int[]array2 = IntStream.rangeClosed(1, 10).toArray();
最简单的方法是使用toArray(IntFunction generator)
方法和数组构造函数引用。这在方法的API文档中被建议。
String[] stringArray = stringStream.toArray(String[]::new);
它的作用是找到一个以一个整数(大小)作为参数并返回String[]
的方法,这正是(new String[]
)的其中一种重载所做的。
您也可以编写自己的IntFunction
:
StreamstringStream = ...; String[] stringArray = stringStream.toArray(size -> new String[size]);
IntFunction generator
的目的是将一个整数(数组大小)转换为新数组。
示例代码:
StreamstringStream = Stream.of("a", "b", "c"); String[] stringArray = stringStream.toArray(size -> new String[size]); Arrays.stream(stringArray).forEach(System.out::println);
输出:
a b c