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 个不同类型对象的元组。示例包含 CharacterStringInteger

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 项目 中找到。


原始标题:Collection Factory Methods for Vavr