Java8函数式编程之Stream编程详解(3)Stream的创建方式

流的创建方式一般有四种,分别是

由值创建流

由数组创建流

由文件创建流

由函数生成流(无限流

接下来我们通过代码直观感受下这四种方式

4.6.1.由值创建流

@Test
public void streamFromValue() {
    Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
    integerStream.forEach(System.out::println);
}

我们通过Stream.of()方法构建了一个整型流,并进行打印(通过System.out方法引用),运行结果

4.6.2.由数组创建流

@Test
public void streamFromArray() {
    int[] numbers = {1, 2, 3, 4, 5};
    IntStream stream = Arrays.stream(numbers);
    stream.forEach(System.out::println);
}

这种方式其实和通过值类似,Arrays工具类的stream方法允许对传入的一个数组对象,并输出对应类型的流。

运行结果

4.6.3.由文件创建流

@Test
public void streamFromFile() throws IOException {
    // 返回指定路径下文件中每一行够成的字符串流
    Stream<String> stream = Files.lines(Paths.get("src/main/java/com/sankuai/meituan/waimai/bizad/jdk8/stream/package-info.java"));
    stream.forEach(System.out::println);
}

我们可以通过文件生成字符串流,通过调用Files.lines(Path path)方法,生成一个字符串流。

运行结果

...省略部分输出...

*      预定义收集器功能(Collectors)
*          1. 将流元素规约和汇总为一个值
*          2. 将流元素分组
*          3. 将流元素分区
* 1. 参考资料
* 区别peek与map https://blog.csdn.net/tckt75433/article/details/81510743
*
*/

Process finished with exit code 0

这里输出的是文件package-info.java中的内容,感兴趣的同学可以传入其他文件查看运行效果。

我们看一下Files.lines方法的声明

public static Stream<String> lines(Path path) throws IOException {

可见是通过Stream,逐行返回文件的每一行字符串

4.6.4.由函数生成流(无限流)

@Test
public void streamFromFunction() {
    Stream<Double> generate = Stream.generate(Math::random);
    // 通过limit限制数量
    generate.limit(10)
            .forEach(System.out::println);
}

由函数生成的流为无限流,也就是如果我们没有做其他的限制(如:指定limit),对其做迭代操作,会一直运行。

这个案例中,我们通过 Math::random 生成随机数,限制生成十个并打印,运行结果

0.8969250722445276
0.8285057001330353
0.2419437635017867
0.11082352196746204
0.8035381196761233
0.5600709938550267
0.21051515736759363
0.8671614956980346
0.8063736774791785
0.8656071095608636

如果去掉limit()会怎样?感兴趣的同学可以自行尝试,相信会加深你对“无限流”的认识。

版权声明:

原创不易,洗文可耻。除非注明,本博文章均为原创,转载请以链接形式标明本文地址。

原文 

http://wuwenliang.net/2020/05/17/Java8函数式编程之Stream编程详解-3-Stream的创建方式/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java8函数式编程之Stream编程详解(3)Stream的创建方式

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址