《Java 8 函数式编程》笔记4
高级集合类和收集器
方法引用
标准语法:Classname::methodName
比如想得到艺术家的名字:
1 | lambda:artist -> artist.getName() |
构造方法同样可以缩写:
1 | lambda:(name, nationality) -> new Artist(name, nationality) |
标准语法:Classname::methodName
比如想得到艺术家的名字:
1 | lambda:artist -> artist.getName() |
构造方法同样可以缩写:
1 | lambda:(name, nationality) -> new Artist(name, nationality) |
并行:两个任务在同一时间发生,比如在多核 CPU 上,A 任务在三核,B 任务在四核。
并发:两个任务共享时间段,比如在 1s 内 A 任务和 B 任务交替运行 0.5s。
在一个 Stream
对象上调用 parallel
方法即可拥有并行操作的能力。
如果想从一个集合类创建一个流,调用 parallelStream
即可获得拥有并行能力的流。
ThreadLocal
能创建一个工厂,为每个线程最多只产生一个值。这是确保非线程安全的类在并发环境下安全使用的一种简单方式。
假设要在数据库查询一个艺术家,但希望每个线程值做一次这种查询:
1 | ThreadLocal<Album> thisAlbum = new ThreadLocal<Album>() { |
为工厂方法 withInitial
传入一个 Supplier
对象实例来创建对象:
1 | ThreadLocal<Album> thisAlbum = ThreadLocal.withInitial( |
命令者是一个对象,它封装了调用另一个方法的所有细节,命令者模式使用该对象,可以编写出根据运行期条件,顺序调用方法的一般化代码。
命令者模式中有四个类参与其中:
命令接收者
执行实际任务
命令者
封装了所有调用命令执行者的信息
发起者
控制一个或多个命令的顺序和执行
客户端
创建具体的命令者实例