最简单的方法是将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 表达式的另一种方法,它与另一方法完全等效。