前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何将 Java 8 中的流转换为数组

如何将 Java 8 中的流转换为数组

作者头像
村雨遥
发布2022-06-15 11:05:47
3.9K0
发布2022-06-15 11:05:47
举报
文章被收录于专栏:JavaPark

问题

Java 8 中,什么是将流转换为数组的最简单的方式?

回答

回答 1

最简单地方式就是使用 toArray(IntFunction<A[]> generator) 方法,该方法也是 Java API 所建议使用的方法,详情请戳

代码语言:javascript
复制
String[] stringArray = stringStream.toArray(String[]::new);

该方法通过给定一个整数(即长度)作为参数,然后返回一个字符串数组(String[]),你也可以写你自己的 IntFunction

代码语言:javascript
复制
Stream<String> stringStream = …;
String[] stringArray = stringStream.toArray(size -> new String[size]);

其中 IntFunction<A[]> generator 的目的是将数组长度放到到一个新的数组中去。

实例

代码语言:javascript
复制
Stream<String< stringStream = Stream.of("a", "b", "c");
String[] stringArray = stringStream.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(Ssytem.out::println);

打印的结果:

代码语言:javascript
复制
a
b
c

回答 2

假设你想从一个流 Stream<Integer> 得到一个 int 类型,且值为 1 ~ 10 的数组,则可以使用 IntSteam

我们县创建一个带有 Stream.of 方法的 Stream,并将其用 mapToIntStream<Integer> 转换为 IntStream,接着再调用 IntStreamtoArray 方法即可;

代码语言:javascript
复制
// 使用如下方法之一均可
Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
// Stream<Integer> stream = IntStream.rangeClosed(1, 10).boxed();
int[] array =  stream.mapToInt(x -> x).toArray();

紧接着也是一样,只需要使用 IntStream 即可;

代码语言:javascript
复制
int[]array2 =  IntStream.rangeClosed(1, 10).toArray();

回答 3

利用如下代码即可轻松将一个流转换为一个数组:

代码语言:javascript
复制
String[] myNewArray3 = myNewStream.toArray(String[]::new);

解释如下,首先我们创建一个包含三个字符串的字符串数组;

代码语言:javascript
复制
String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};

接着我们为给定的数组创建一个流:

代码语言:javascript
复制
Stream<String> stringStream = Arrays.stream(stringList);

然后我们在这个流上就可以进行一系列操作了:

代码语言:javascript
复制
Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());

最后,我们使用就可以使用如下方法将其转换为数组:

  1. 传统方法(功能接口)
代码语言:javascript
复制
IntFunction<String[]> intFunction = new IntFunction<String[]>() {
    @Override
    public String[] apply(int value) {
        return new String[value];
    }
};

String[] myNewArray = myNewStream.toArray(intFunction);
  1. Lambda 表达式
代码语言:javascript
复制
String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);
  1. API 方法
代码语言:javascript
复制
String[] myNewArray3 = myNewStream.toArray(String[]::new);

该方法其实是另一种 Lambda 表达式的写法,功能等价于第 2 种方法。

出处

文章翻译自 Stack Overflow:How to convert a Java 8 Stream to an Array?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 回答
    • 回答 1
      • 回答 2
        • 回答 3
        • 出处
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档