最简单的方法是将toArray(IntFunction<A[]> generator)方法与数组构造函数引用一起使用。在API 文档中建议该方法 。 
String[] stringArray = stringStream.toArray(String[]::new);它的作用是找到一个以整数(大小)作为参数的方法,并返回String[] ,而这正是new String[] (的重载之一)所做的事情。 
您也可以编写自己的IntFunction : 
Stream<String> stringStream = ...;
String[] stringArray = stringStream.toArray(size -> new String[size]); IntFunction<A[]> generator是将整数(数组的大小)转换为新数组。 
示例代码:
Stream<String> stringStream = Stream.of("a", "b", "c");
String[] stringArray = stringStream.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);印刷品:
a
b
c如果要从 Stream 中获取一个整数数组,其值的形式为 1 到 10,则可以使用 IntStream。
在这里,我们使用 Stream.of 方法创建一个 Stream,并使用 mapToInt 将 Stream 转换为 IntStream。然后我们可以调用 IntStream 的 toArray 方法。
Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
//or use this to create our stream 
//Stream<Integer> stream = IntStream.rangeClosed(1, 10).boxed();
int[] array =  stream.mapToInt(x -> x).toArray();这是同一件事,没有 Stream,仅使用 IntStream
int[]array2 =  IntStream.rangeClosed(1, 10).toArray();您可以使用以下简单代码块将 Java 8 流转换为数组:
String[] myNewArray3 = myNewStream.toArray(String[]::new);但是,让我们进一步解释一下,首先,我们创建一个包含三个值的字符串列表:
String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};从给定的 Array 创建一个流:
Stream<String> stringStream = Arrays.stream(stringList);我们现在可以在此流 Ex 上执行一些操作:
Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());最后使用以下方法将其转换为 Java 8 Array:
1 - 经典方法(功能接口)
IntFunction<String[]> intFunction = new IntFunction<String[]>() {
    @Override
    public String[] apply(int value) {
        return new String[value];
    }
};
String[] myNewArray = myNewStream.toArray(intFunction);2-Lambda 表达式
String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);3 - 方法参考
String[] myNewArray3 = myNewStream.toArray(String[]::new);方法参考说明:
这是编写 lambda 表达式的另一种方法,它与另一方法完全等效。