第一部分 基础知识
第1章 Java 8、9、10以及11的变化
1.1 为什么要关心Java的变化
1.2 Java怎么还在变
1.2.1 Java在编程语言生态系统中的位置
1.2.2 流处理
1.2.3 用行为参数化把代码传递给方法
1.2.4 并行与共享的可变数据
1.2.5 Java需要演变
1.3 Java中的函数
1.3.1 方法和Lambda作为一等值
1.3.2 传递代码:一个例子
1.3.3 从传递方法到Lambda
1.4 流
1.5 默认方法及Java模块
1.6 来自函数式编程的其他好思想
1.7 小结
第2章 通过行为参数化传递代码
2.1 应对不断变化的需求
2.1.1 初试牛刀:筛选绿苹果
2.1.2 再展身手:把颜色作为参数
2.1.3 第三次尝试:对你能想到的每个属性做筛选
2.2 行为参数化
2.3 对付啰唆
2.3.1 匿名类
2.3.2 第五次尝试:使用匿名类
2.3.3 第六次尝试:使用Lambda表达式
2.3.4 第七次尝试:将List类型抽象化
2.4 真实的例子
2.4.1 用Comparator来排序
2.4.2 用Runnable执行代码块
2.4.3 通过Callable返回结果
2.4.4 GUI事件处理
2.5 小结
第3章 Lambda表达式
3.1 Lambda管中窥豹
3.2 在哪里以及如何使用Lambda
3.2.1 函数式接口
3.2.2 函数描述符
3.3 把Lambda付诸实践:环绕执行模式
3.3.1 第 1 步:记得行为参数化
3.3.2 第 2 步:使用函数式接口来传递行为
3.3.3 第 3 步:执行一个行为
3.3.4 第 4 步:传递Lambda
3.4 使用函数式接口
3.4.1 Predicate
3.4.2 Consumer
3.4.3 Function
3.5 类型检查、类型推断以及限制
3.5.1 类型检查
3.5.2 同样的Lambda,不同的函数式接口
3.5.3 类型推断
……
第二部分
第4章 引入流
第5章 使用流
第6章 用流收集数据
第7章 并行数据处理与性能
第三部分 使用流和Lambda进行高效编程
第8章 Collection API的增强功能
第9章 重构、测试和调试
第10章 基于Lambda的领域特定语言
第四部分 无所不在的Java
第11章 用Optional取代null
第12章 新的日期和时间API
第13章 默认方法
第14章 Java模块系统
第五部分 提升Java的并发性
第15章 CompletableFuture及反应式编程背后的概念
第16章 CompletableFuture:组合式异步编程
第17章 反应式编程
第六部分 函数式编程以及Java未来的演进
第18章 函数式的思考
第19章 函数式编程的技巧
第20章 面向对象和函数式编程的混合:Java和Scala的比较
第21章 结论以及Java的未来
附录A 其他语言特性的更新
附录B 其他类库的更新
附录C 如何以并发方式在同一个流上执行多种操作
附录D Lambda表达式和JVM字节码