JAVA8函数式编程
# JAVA8函数式编程
Java 是一门面向对象编程语言。面向对象编程语言和函数式编程语言中的基本元素(Basic Values)都可以动态封装程序行为:面向对象编程语言使用带有方法的对象封装行为,函数式编程语言使用函数封装行为。但这个相同点并不明显,因为Java 对象往往比较“重量级”:实例化一个类型往往会涉及不同的类,并需要初始化类里的字段和方法。
# 简单模型
Artist 创作音乐的个人或团队。
- name: 艺术家的名字( 例如“ 甲壳虫乐队”)。
- members: 乐队成员( 例如“ 约翰 · 列侬”) 该字段可为空。
- origin: 乐队来自哪里( 例如“ 利物浦”)。
Track专辑中的一支曲目。
- name: 曲目名称( 例如《 黄色潜水艇》)。
Album 专辑, 由若干曲目组成。
- name: 专辑名( 例如《 左轮手枪》)。
- tracks: 专辑上所有曲目的列表。
- musicians: 参与创作本专辑的艺术家列表
collect(toList())由 Stream 里的值生成一个列表, 是一个及早求值操作。**map(Function<? super T, ? extends R> mapper)可以将一种类型的值转换成另外一种类型**

**filter(Predicate<? super T> predicate)遍历数据并检查其中的元素**

**flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)flatMap 方法可用 Stream 替换值, 然后将多个 Stream 连接成一个 Stream**

**max(Comparator<? super T> comparator) 和 min(Comparator<? super T> comparator)求最大值和最小值。**
List<Track> tracks = asList(new Track("Bakai", 524),
new Track("Violets for Your Furs", 378),
new Track("Time Was", 451));
Track shortestTrack = tracks.stream()
.min(Comparator.comparing(track -> track.getLength()))
.get();
1
2
3
4
5
6
2
3
4
5
6
**reduce()实现从一组值中生成一个值。**

- **Optional是为核心类库新设计的一个数据类型, 用来替换 null 值。**使用 Optional 对象有两个目的: 首先, Optional 对象鼓励程序员适时检查变量是否为空, 以避免代码缺陷; 其次, 它将一个类的 API 中可能为空的值文档化, 这比阅读实现代码要简单很多。Optional 对象相当于值的容器, 而该值可以通过 get 方法提取。
- 方法引用**
标准语法为 Classname::methodName。** **partitioningBy**接受一个流, 并将其分成两部分。它使用 Predicate 对象判断一个元素应该属于哪个部分, 并根据布尔值返回一个 Map 到列表。
public Map<Boolean, List<Artist>> bandsAndSoloRef(
Stream<Artist> artists) {
return artists.collect(partitioningBy(Artist::isSolo));
}
1
2
3
4
2
3
4

**groupingBy**收集器( 如图5-2 所示) 接受一个分类函数, 用来对数据分组, 就像 partitioningBy 一样, 接受一个Predicate 对象将数据分成 ture 和 false 两部分。

上次更新: 2020/07/25, 16:07:00