1. 概述
Vavr 是一个强大的 Java 8+ 库,构建在 Java lambda 表达式之上。受 Scala 语言启发,Vavr 为 Java 引入了函数式编程特性,包括模式匹配、控制结构、数据类型、持久化不可变集合等。
本文将重点介绍如何使用 Vavr 的工厂方法创建集合。如果你是 Vavr 新手,建议先阅读入门教程,其中包含其他实用文章的链接。
2. Maven 依赖
在 Maven 项目中添加 Vavr 库,需在 pom.xml
中加入以下依赖:
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.9.1</version>
</dependency>
最新版本可在 Maven 中央仓库 查找。
3. 静态工厂方法
通过静态导入:
static import io.vavr.API.*;
我们可以用构造器 List(...)
创建列表:
List numbers = List(1,2,3);
替代传统的静态工厂方法 of(...)
:
List numbers = List.of(1,2,3);
同样适用于元组:
Tuple t = Tuple('a', 3);
替代:
Tuple t = Tuple.of('a', 3);
这种语法糖类似 Scala/Kotlin 的风格。后文将统一使用这种简写形式。
4. 创建 Option 元素
Option 虽不是集合,但却是 Vavr 的核心工具。它是一种可容纳对象或 None(等价于 null)的类型:
Option<Integer> none = None();
Option<Integer> some = Some(1);
5. Vavr 元组
Java 原生不支持元组(如有序对、三元组等)。Vavr 允许创建最多容纳 8 个不同类型对象的元组。示例包含 Character
、String
和 Integer
:
Tuple3<Character, String, Integer> tuple
= Tuple('a', "chain", 2);
6. Try 类型
Try 类型用于封装可能抛出异常的计算:
Try<Integer> integer
= Success(55);
Try<Integer> failure
= Failure(new Exception("Exception X encapsulated here"));
调用 integer.get()
返回 55,而 failure.get()
会抛出异常。
7. Vavr 集合
Vavr 提供多种集合创建方式。以 List 为例,支持 List.of()
、List.fill()
、List.tabulate()
等。如前所述,默认工厂方法 List.of()
可简写为 Scala 风格构造器:
List<Integer> list = List(1, 2, 3, 4, 5);
也可创建空列表(Vavr 中称为 Nil 对象):
List()
类似地,其他集合类型创建方式如下:
Array arr = Array(1, 2, 3, 4, 5);
Stream stm = Stream(1, 2, 3, 4, 5);
Vector vec = Vector(1, 2, 3, 4, 5);
8. 总结
我们介绍了 Vavr 核心类型和集合的常用构造器。通过第 3 节的静态导入语法糖,可以轻松创建库中所有类型。
本文所有代码示例可在 GitHub 项目 中找到。