Java8函数式编程--简介

1,免责声明,本文大部分内容摘自《Java8函数式编程》。在这本书的基础上,根据自己的理解和网上一些博文,精简或者修改。本次分享的内容,只用于技术分享,不作为任何商业用途。当然这本书是非常值得一读,强烈建议买一本!
2,本次分享的样例代码均上传到github上,请点击这里

第1章 简介

主要内容如下:

  • 1.1 为什么需要再次修改Java
  • 1.2 什么是函数式编程
  • 1.3 示例

1.1 为什么需要再次修改Java

1996年1月,Java1.0发布,此后计算机编程领域发生了翻天覆地的变化。商业发展需要更复杂的应用,大多数程序都跑在功能强大的多核CPU机器上。

多核CPU的兴起成为了不容回避的事实。涉及锁的编程算法不但容易出错,而且耗时间。于是出现了java.util.concurrent包和很多第三方类库,试图并行抽象化,帮助程序员写成多核CPU上运行良好的程序。很可惜,效果远远不够。

开发类库的程序员使用Java时,发现抽象级别还不够。处理大型数据集合就是个很好的例子,面对大型数据集合,Java还欠缺高效的并行操作。开发者能够使用Java8编写复杂的集合处理算法,只需要简单修改一个方法,就能让代码在多核CPU上高效运行。为了编写这类处理批量数据的并行类库,需要在语言层面上修改现有的Java:增加Lambda表达式。

对于习惯了面向对象编程的开发者来说,抽象的概念并不陌生。面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象。不是所有人都能编写性能优先的代码,对于这些人来说,函数式编程带来的好处尤为明显。程序员能编写出更容易阅读的代码 — 这种代码更多地表达了业务逻辑的意图,而不是它的实现机制。

1.2 什么是函数式编程

每个人对函数式编程的理解不尽相同。但其核心是:在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值。

本次系列分享的重点放在函数式编程的实用性上,包括可以被大多数程序员理解和使用的技术,写出易读、易维护的代码。

1.3 示例

本次系列分享的示例全部围绕就一个常见的问题领域构造:音乐。有关术语(实体类)定义如下:

  • Artist // 音乐家或乐队
    name:艺术家的名字或乐队名称 (String)。
    members:乐队成员,该字段可以为空 (List)。
    origin:乐队来自哪里 (String)。

  • Track // 歌曲
    name:歌曲名称 (String)。
    length:歌曲播放时间 (int)。

  • Album // 专辑
    name:专辑名 (String)。
    tracks:专辑上所有歌曲列表 (List)。
    musicians:参与创造本专辑的艺术家列表 (List)。

猜你喜欢

转载自blog.csdn.net/gengwenwu/article/details/80724987