page contents

Java Guava 教程- 拯救垃圾代码,写出优雅高效,效率提升N倍

本文讲述了Java Guava 教程- 拯救垃圾代码,写出优雅高效,效率提升N倍!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2023-06-Nl1E6EoZ649b8dbb59450.png本文讲述了Java Guava 教程- 拯救垃圾代码,写出优雅高效,效率提升N倍!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

Guava 项目是 Google 公司开源的 Java 核心库,它主要是包含一些在 Java 开发中经常使用到的功能,如数据校验、不可变集合、计数集合,集合增强操作、I/O、缓存、字符串操作等。并且 Guava 广泛用于 Google 内部的 Java 项目中,也被其他公司广泛使用,甚至在新版 JDK 中直接引入了 Guava 中的优秀类库,所以质量毋庸置疑。

使用方式直接 mavan 依赖引入。

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->

<dependency>

    <groupId>com.google.guava</groupId>

    <artifactId>guava</artifactId>

    <version>30.0-jre</version>

</dependency>

数据校验

数据校验说来十分简单,一是非空判断,二是预期值判断。非空判断我想每一个 Java 开发者都很熟悉,一开始都经常和 NullPointException 打交道。处理的方式我们自然是一个 if( xx == null) 就能轻松解决。预期值判断也是类似,检查数据值是不是自己想要的结果即可。

即使这么简单的操作,我们是不是还经常出错呢?而且写起来的代码总是一行判断一行异常抛出,怎么看都觉得那么优雅。还好,现在就来尝试第一次使用 Guava 吧。

非空判断

String param = "未读代码";

String name = Preconditions.checkNotNull(param);

System.out.println(name); // 未读代码

String param2 = null;

String name2 = Preconditions.checkNotNull(param2); // NullPointerException

System.out.println(name2);

引入了 Guava 后可以直接使用 Preconditions.checkNotNull 进行非空判断,好处为觉得有两个,一是语义清晰代码优雅;二是你也可以自定义报错信息,这样如果参数为空,报错的信息清晰,可以直接定位到具体参数。

String param2 = null;

String name2 = Preconditions.checkNotNull(param2,"param2 is null");

// java.lang.NullPointerException: param2 is null

预期值判断

和非空判断类似,可以比较当前值和预期值,如果不相等可以自定义报错信息抛出。

String param = "www.wdbyte.com2";

String wdbyte = "www.wdbyte.com";

Preconditions.checkArgument(wdbyte.equals(param), "[%s] 404 NOT FOUND", param);

// java.lang.IllegalArgumentException: [www.wdbyte.com2] 404 NOT FOUND

是否越界

Preconditions 类还可以用来检查数组和集合的元素获取是否越界。

// Guava 中快速创建ArrayList

List<String> list = Lists.newArrayList("a", "b", "c", "d");

// 开始校验

int index = Preconditions.checkElementIndex(5, list.size());

// java.lang.IndexOutOfBoundsException: index (5) must be less than size (4)

代码中快速创建 List 的方式也是 Guava 提供的,后面会详细介绍 Guava 中集合创建的超多姿势。

不可变的集合

创建不可变集合是我个人最喜欢 Guava 的一个原因,因为创建一个不能删除、不能修改、不能增加元素的集合实在是太实用了。这样的集合你完全不用担心发生什么问题,总的来说有下面几个优点:

线程安全,因为不能修改任何元素,可以随意多线程使用且没有并发问题。

可以无忧的提供给第三方使用,反正修改不了。

减少内存占用,因为不能改变,所以内部实现可以最大程度节约内存占用。

可以用作常量集合。

创建方式

说了那么多,那么到底怎么使用呢?赶紧撸起代码来。

// 创建方式1:of

ImmutableSet<String> immutableSet = ImmutableSet.of("a", "b", "c");

immutableSet.forEach(System.out::println);

// a

// b

// c

// 创建方式2:builder

ImmutableSet<String> immutableSet2 = ImmutableSet.<String>builder()

    .add("hello")

    .add(new String("未读代码"))

    .build();

immutableSet2.forEach(System.out::println);

// hello

// 未读代码

// 创建方式3:从其他集合中拷贝创建

ArrayList<String> arrayList = new ArrayList();

arrayList.add("www.wdbyte.com");

arrayList.add("https");

ImmutableSet<String> immutableSet3 = ImmutableSet.copyOf(arrayList);

immutableSet3.forEach(System.out::println);

// www.wdbyte.com

// https

都可以正常打印遍历结果,但是如果进行增删改,会直接报 UnsupportedOperationException .

其实 JDK 中也提供了一个不可变集合,可以像下面这样创建。

ArrayList<String> arrayList = new ArrayList();

arrayList.add("www.wdbyte.com");

arrayList.add("https");

// JDK Collections 创建不可变 List

List<String> list = Collections.unmodifiableList(arrayList);

list.forEach(System.out::println);// www.wdbyte.com https

list.add("未读代码"); // java.lang.UnsupportedOperationException

注意事项

使用 Guava 创建的不可变集合是拒绝 null 值的,因为在 Google 内部调查中,95% 的情况下都不需要放入 null 值。

使用 JDK 提供的不可变集合创建成功后,原集合添加元素会体现在不可变集合中,而 Guava 的不可变集合不会有这个问题。

   List<String> arrayList = new ArrayList<>();

   arrayList.add("a");

   arrayList.add("b");

   List<String> jdkList = Collections.unmodifiableList(arrayList);

   ImmutableList<String> immutableList = ImmutableList.copyOf(arrayList);

   arrayList.add("ccc");

   jdkList.forEach(System.out::println);// result: a b ccc

   System.out.println("-------");

   immutableList.forEach(System.out::println);// result: a b

如果不可变集合的元素是引用对象,那么引用对象的属性是可以更改的。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Java编程语言,推荐大家关注一个微信公众号:Java圈子。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Java入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2023-03-2AoKIjPQ64014b4ad30a3.jpg

  • 发表于 2023-06-28 09:33
  • 阅读 ( 162 )
  • 分类:Java开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1478 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章