廖雪峰Java16函数式编程-2Stream-1Stream简介

Posted csj2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了廖雪峰Java16函数式编程-2Stream-1Stream简介相关的知识,希望对你有一定的参考价值。

1. Stream

Java8引入全新的Stream API

  • 位于java.util.stream包

1.1 Stream API不同于java.io的InputStream/OutputStream

java.iojava.util.stream
存储顺序读写的byte/char顺序输出的任一Java对象
用途序列化数据至文件/网络内存计算/业务逻辑

1.2 Stream和List也是不同的

List元素已经分配并存储在内存中的,而Stream输出的元素并没有预先存储在内存中,它通常是实时计算出来的。
List的用途是操作一组已存在的Java对象,而Stream实现是各种变换和惰性计算。

java.util.Listjava.util.stream
元素已分配并存储在内存未分配,实时计算
用途操作一组已存在的Java对象惰性计算

2. 例子:全体自然数的集合

用List不可能盛放这个集合的,因为自然数是无限大的,内存再大,也不能放入List中,但用Stream可以做到

    Stream<BigInteger> naturals = createNaturalStream(); //不用考虑createNaturalStream()如何实现
    naturals.map( (n)->n.multiply(n) )  //输出自然数的平方
        .limit(100) //取前100个元素
        .foreach(System.out::println); //处理每个元素

调用方对每个自然数计算平方,这样就把一个stream转换成另一个stream。因为获取的stream也是无限的,所以我们必须把无限个元素转换为有限个元素,并处理这个有限集合的每个元素

Stream的特点:

  • 可以存储有限个或无限个元素
  • 可以转换为另一个Stream
  • 计算通常发生在最后结果的获取(惰性计算)

以上是关于廖雪峰Java16函数式编程-2Stream-1Stream简介的主要内容,如果未能解决你的问题,请参考以下文章

python学习之4函数式编程(廖雪峰)

python函数式编程-------python2.7教程学习廖雪峰版

廖雪峰的Python系列教程——函数式编程之偏函数

廖雪峰老师——Python进阶( 函数式编程 )

Php廖雪峰教程学习与实战

Python函数式编程以及高阶函数