协慌网

登录 贡献 社区

如何将 Java 8 流转换为数组?

将 Java 8 Stream转换为数组的最简单 / 最快捷的方法是什么?

答案

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