国外程序员用的火热的Vavr是什么鬼?让函数式编程更简单!

引言

相信很多人关注 Vavr 的原因,还是因为 Hystrix 库。Hystrix 不更新了,并在 GitHub 主页上推荐了 Resilience4j,而 Vavr 作为 Resilience4j 的唯一依赖被提及。对于 Resilience4j 这个以轻依赖作为特色之一的容错库,为什么还会引用 Vavr 呢?

以下是 Resilience4j 官方原文:

Resilience4j is a lightweight fault tolerance library inspired by Netflix Hystrix, but designed for Java 8 and functional programming. Lightweight, because the library only uses Vavr, which does not have any other external library dependencies.

Resilience4j 除了轻量,另一特点是对 Java 8 函数式编程的支持,经过一番了解,Vavr 正是为了提升 Java 函数式编程体验而开发的,通过它可以帮助我们编写出更简洁、高效的函数风格代码。

限于篇幅,该系列分为上、下两篇:上篇着重回顾函数式编程的一些基础知识,以及 Vavr 总体介绍、Vavr 对元组、函数的支持,通过上篇的学习;下篇着重讲述 Vavr 中对各种值类型、增强集合、参数检查、模式匹配等特性。力求通过这两篇文章,把 Vavr 的总体特性呈现给大家,让大家对 Vavr 有个全面的认识。

简介

Vavr是 Java 8+ 函数式编程的增强库。提供了不可变数据类型和函数式控制结构,旨在让 Java 函数编程更便捷高效。特别是功能丰富的集合库,可以与Java的标准集合平滑集成。

Vavr 的读音是 /ˈweɪ.vɚ/,早期版本叫 Javaslang,由于和 Java™ 商标冲突(类似国内的 JavaEye 改名),所以把 Java 倒过来取名。

函数式编程

学习 Vavr 之前,我们先回顾下 Java 函数式编程及 Lambda (λ)  表达式的一些相关内容。

Java 8 开始,在原有面向对象、命令式编程范式的基础上,增加了函数式编程支持,其核心是行为参数化,把行为具体理解为一个程序函数(方法),即是将函数作为其它函数的参数传递,组成高阶函数。

举个例子,人(People)这个类存在一个年龄(age)属性,我们想根据每个人的年龄进行排序比较。

首先看下 Java 8 之前的做法:

Comparator<People> comparator = new Comparator<People>() {
  @Override
  public int compare(People p1, People p2) {
    return Integer.compare(p1.getAge(), p2.getAge());
  }
};

再看 Java 8 之后的做法:

Comparator<People> comparator
    = (p1, p2) -> Integer.compare(p1.getAge(), p2.getAge());

利用 Lambda 表达式的语法,确实少了很多模板代码,看起来更加简洁了。关于 Java 的函数式编程及 Lambda 表达式语法,有以下需要掌握的知识点:

函数式接口

函数式接口 (Functional Interface) 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,通常会用 @FunctionalInterface 进行标注,但不是必须的。Java 8 自带了常用的函数式接口,存放在 java.util.function 包下,包括 FunctionSupplierConsumerPredicate 等,此外在其它地方也用到很多函数式接口,比如前面演示的 Comparator

Lambda 表达式

Lambda 表达式是一种匿名函数,在 Java

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值