课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
函数式编程开发随着互联网的不断发展而被越来越多的人掌握,今天我们就通过案例分析来简单了解一下,Java编程函数式编程流的概念。
1、流
流是一个与任何特定的存储机制都没有关系的元素序列,我们一般会这样说流:没有存储。
不同于对于任何一个集合的操作,当我们使用流时,我们是从一个管道中抽取元素进行处理,这非常重要,因为大多数时候我们不会无缘无故的将元素放进一个集合,我们一定是希望对其进行一些处理,也就是说,我们不是为了存储才将它们放入集合的。
如果是这样,那么就意味着我们的编程很多时候需要转向流而不是集合。
流关键的优点是,能够使得我们的程序更小也更好理解。事实上,lambda函数和方法引用正是在这里才发挥出了其真正的威力,它们一同将Java带入了声明式编程:我们说明想要完成什么,而不是指明需要怎么去做。
类似流+函数式编程这样实现的声明式编程机制,就被称之为内部迭代,我们看不见其内部的具体操作
而通过循环,将内部的数据一个一个处理成型的机制就被称为外部迭代,我们可以显式的看清和修改内部的操作
流带来的声明式编程是Java8重要的新特性之一,为此,Java还引入了新的关键词default以便它们大刀阔斧的修改一些老的集合类,以便使得它们支持流。
2、Optional类型
到此我们已经了解了流的创建和中间操作,但是在学习终结操作之前,我们还有一个更重要的问题:健壮性研究。
在前面的处理环节我们需要考虑,如果流中存在一个null会发生什么呢?要知道流可不是什么快乐通道,作为程序员,我们必须要考虑周全,环环相扣。
所以为了防止在某些不该出现null的地方出现了null导致处理失败,我们需要一个类似占位符的存在,它既可以作为流元素占位也可以在我们要找的元素不存在时告知我们(即不会抛出异常)
这个想法的实现就是Optional类型,这些类型只会通过某些标准流操作返回,因为这些操作不一定能保证所要的结果一定存在:
findFirst()返回包含一个元素的Optional,若流为空,则返回Optional.empty
findAny()返回包含任何元素的Optional,若流为空,则返回Optional.empty
max()和min()分别返回包含流中大或小值的Optional,若流为空,则返回Optional.empty
reduce()的其中一个实现,参数为一个接收两个参数并返回一个结果的方法引用,其作用就是返回各个元素根据该参数计算得到的值,其中每次迭代计算出的值会作为下一次计算的一个参数
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。