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
  • **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

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

上次更新: 2020/07/25, 16:07:00
最近更新
01
RabbitMQ简介
10-27
02
聊聊Java多态
10-21
03
JVM垃圾回收器
10-16
更多文章>