模式匹配在 Java 中,我们可以使用 switch 和 case 来根据值的不同来执行不同的逻辑。不过 switch 和 case 提供的功能很弱,只能进行相等匹配。Vavr 提供了模式匹配的 API,可以对多种情况进行匹配和执行相应的逻辑。在清单 12 中,我们使用 Vavr 的 Match 和 Case 替换了 Java 中的 switch 和 case。Match 的参数是需要进行匹配的值。Case 的第一个参数是匹配的条件,用 Predicate 来表示;第二个参数是匹配满足时的值。$(value) 表示值为 value 的相等匹配,而 $() 表示的是默认匹配,相当于 switch 中的 default。
清单 12. 模式匹配的示例1
2
3
4
5
6
7
8
| String input = "g";
String result = Match(input).of(
Case($("g"), "good"),
Case($("b"), "bad"),
Case($(), "unknown")
);
System.out.println(result);
// 输出 good
|
在清单 13 中,我们用 $(v -> v > 0) 创建了一个值大于 0 的 Predicate。这里匹配的结果不是具体的值,而是通过 run 方法来产生副作用。
清单 13. 使用模式匹配来产生副作用1
2
3
4
5
6
7
| int value = -1;
Match(value).of(
Case($(v -> v > 0), o -> run(() -> System.out.println("> 0"))),
Case($(0), o -> run(() -> System.out.println("0"))),
Case($(), o -> run(() -> System.out.println("< 0")))
);
// 输出< 0
|
|