java guava主要功能介绍及使用心得总结
作者:阿Qoder 发布时间:2023-07-30 11:01:54
1. 前言
Guava是一个由Google开发的Java核心库,它提供了很多有用的方法和实用工具类,可以帮助开发人员提高代码质量和开发效率。在本文中,我们将详细介绍Guava框架的主要功能,并通过实例代码来展示如何使用这些功能。
Guava框架的初衷是为了解决Java标准库中的一些不足之处,例如集合操作的不便利、缺少功能强大的缓存实现等问题。随着Guava的不断发展,它已经成为Java开发者们的“必备”工具之一。Guava的主要特点有:
优雅的API设计
强大的功能
易于使用
良好的性能
Guava框架的源代码托管在 github.com/google/guav…,你可以通过Maven或者Gradle将Guava添加到你的项目中。下面是两种添加Guava的方式:
Maven:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>
Gradle:
implementation 'com.google.guava:guava:30.1-jre'
2. Guava主要功能介绍
接下来,我们将通过示例代码,介绍Guava框架的主要功能。
2.1 集合操作
集合可以说是我们写的较多的代码了,Guava对Java集合类进行了扩展,提供了更多实用的操作。例如:
不可变集合(Immutable Collections)。
新的集合类型(Multiset、Multimap、BiMap、Table)。
Immutable Collections:
Immutable Collections是一种不可变的集合类型。与普通的集合(如List、Set、Map)相比,Immutable Collections在初始化后无法对其做任何修改。这样可以确保数据的一致性和安全性。
import com.google.common.collect.ImmutableList;
public class GuavaExample {
public static void main(String[] args) {
ImmutableList<String> names = ImmutableList.of("Alice", "Bob", "Charlie");
// names.add("David"); // 这将引发UnsupportedOperationException异常
}
}
新的集合类型:
Guava还引入了一些新的集合类型,例如Multiset、Multimap、BiMap和Table。这些新的集合类型可以帮助我们更方便地处理复杂的数据结构。
Multiset<String> names = HashMultiset.create();
names.add("Alice");
names.add("Bob");
names.add("Alice");
System.out.println(names.count("Alice")); // 输出: 2
集合计算:
Guava 提供了一些常用的集合计算工具类,可以帮助开发者轻松地对集合进行计算和操作。
Iterators类:提供了一些静态方法,用于对迭代器进行操作,如转换、过滤、合并等。
Lists类:提供了一些静态方法,用于对列表进行操作,如反转、拆分、排序等。
Sets类:提供了一些静态方法,用于对Set进行操作,如取交集、并集、差集等。
Maps类:提供了一些静态方法,用于对Map进行操作,如转换、合并、排序等。
Multisets类:提供了一些静态方法,用于对多重集合进行操作,如计算元素出现的次数、取交集、并集等。
Multimaps类:提供了一些静态方法,用于对多重映射进行操作,如计算键值对数量、转换、合并等。
7.Table类用于处理二维表格数据、
8.Ordering类用于对集合进行排序等。
下面是一个简单的列子
List<String> list1 = Arrays.asList("foo", "bar", "baz");
List<String> list2 = Arrays.asList("bar", "qux", "corge");
// 合并并去重复
List<String> mergedList = ImmutableList.copyOf(Sets.union(Sets.newHashSet(list1), Sets.newHashSet(list2)));
System.out.println(mergedList);
// 取两个集合的交集
Set<String> intersectionSet = Sets.intersection(Sets.newHashSet(list1), Sets.newHashSet(list2));
System.out.println(intersectionSet);
// 对集合list1排序
List<String> sortedList = Ordering.natural().sortedCopy(list1);
System.out.println(sortedList);
2.2 缓存
Guava提供了一个功能丰富且性能优越的缓存实现:Cache。Guava Cache可以帮助我们轻松地实现缓存功能,提高程序运行效率。
Cache<String, String> cache = CacheBuilder.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES) // 设置缓存过期时间
.maximumSize(1000) // 设置缓存最大容量
.build();
cache.put("key", "value");
System.out.println(cache.getIfPresent("key")); // 输出: value
2.3 字符串处理
Guava提供了一系列易用且功能强大的字符串处理工具类。例如:
Joiner:用于连接字符串
Splitter:用于分割字符串
CharMatcher:用于匹配和操作字符。例如,可以使用CharMatcher.whitespace().trimFrom(" foo ")将字符串两端的空格删除,返回"foo"。
CaseFormat:用于在不同的命名格式(如驼峰命名法、下划线命名法等)之间进行转换
Strings:各种字符串处理方法,如判断字符串是否为空或空白、在字符串中查找子字符串、替换字符串等。
Joiner:
Joiner类可以帮助我们轻松地将集合或数组中的元素连接成一个字符串。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
String joinedNames = Joiner.on(", ").join(names);
System.out.println(joinedNames); // 输出: Alice, Bob, Charlie
Splitter:
Splitter类可以帮助我们轻松地将字符串分割成集合或数组。
String names = "Alice, Bob, Charlie";
List<String> nameList = Splitter.on(", ").splitToList(names);
System.out.println(nameList); // 输出: [Alice, Bob, Charlie]
CharMatcher:
CharMatcher类可以帮助我们处理字符匹配和过滤问题。
CaseFormat:
CaseFormat类可以帮助我们轻松地进行字符大小写转换和格式化。比如:
String lowerCamel = "lowerCamelCase";
System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, lowerCamel)); // 输出: LowerCamelCase
System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, lowerCamel)); // 输出: lower_camel_case
System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, lowerCamel)); // 输出: LOWER_CAMEL_CASE
2.4 函数式编程
Guava支持函数式编程风格,提供了一些实用的函数接口,如Function、Predicate和Supplier。这些接口可以帮助我们更好地处理数据集合和数据流。
List<Integer> numbers = Lists.newArrayList(1, 2, 3, 4, 5);
// 使用Function进行数据转换
Collection<Integer> squaredNumbers = Collections2.transform(numbers, new Function<Integer, Integer>() {
public Integer apply(Integer input) {
return input * input;
}
});
System.out.println(squaredNumbers); // 输出: [1, 4, 9, 16, 25]
// 使用Predicate进行数据过滤
Collection<Integer> evenNumbers = Collections2.filter(numbers, new Predicate<Integer>() {
public boolean apply(Integer input) {
return input % 2 == 0;
}
});
System.out.println(evenNumbers); // 输出: [2, 4]
2.5 其他实用工具
Guava还提供了其他许多实用工具,例如:
原生类型处理工具类:Ints、Longs、Doubles等
范围(Range):用于处理区间
停止计时器(Stopwatch):用于测量时间
散列(Hashing):用于计算哈希值
3. 结论
本文介绍了Guava框架的主要功能,包括集合操作、缓存、字符串处理、函数式编程以及其他实用工具。Guava通过优雅的API设计、强大的功能、易用性和良好的性能,为Java开发者带来了极大的便利。还等什么,这么好用的框架赶紧用起来吧。
来源:https://juejin.cn/post/7222964968605335589
猜你喜欢
- Android Studio从3.0版本新增了许多功能,当然首当其冲就是从3.0版本新增了对 Kotlin 开发语言的支持,除此之外还有其他
- 一、什么是桥接模式:桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥。在现
- 在某种场景下,可能我们需要获取app的图标名称和启动图片的名称。比如说app在前台时,收到了远程通知但是通知栏是不会有通知提醒的,这时我想做
- Device Administration对于这个应用,市场上很多,但是看一下评论就知道效果有多差了,因为99%一键锁屏应用没办法卸载。今天
- 一、前言一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文
- 在 C# 中反射技术应用广泛,至于什么是反射.........你如果不了解的话,请看下段说明,否则请跳过下段。广告一下:喜欢我文章的朋友请关
- 为了学习数据库,重装了系统,之前前一直在用eclipse,现在准备换成myeclipse,这之前当然需要重新设置环境变量,顺手写下有关jdk
- java arrayList遍历的四种方法及Java中ArrayList类的用法package com.test;import java.u
- 本文实例为大家分享了Android登录注册功能的具体代码,供大家参考,具体内容如下展示效果代码区MainActivity(登录方法)publ
- 写在自定义之前我们也许会遇到,自定义控件的触屏事件处理,先来了解一下View类中的,onTouch事件和onTouchEvent事件。1、b
- 一、前言程序界面上的按钮多种多样,常用的就这几种:普通按钮、图标按钮、文字按钮、图片文字混合按钮。本文章记录了不同样式类型的按钮实现方法。下
- JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其
- 1. mybatis-plus开启二级缓存spring: datasource: type: com.alibaba.druid
- 一:背景1. 讲故事周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样
- 如何打印GC日志排查问题在工作当中,有时候我们会需要打印GC的相关信息来定位问题。该如何做呢?先来看个示例public static voi
- 干java 开发这么多年, 之前一直没留意java 进程还区分守护进程和用户进程。守护进程这个概念最早还是在linux系统中接触的,直到近期
- 问答小剧场 以下会产生信息丢失的类型转换是( ) A.float a=10;
- 10万+IT人都在关注的图片批量压缩上传方案(完整案例+代码)背景需求:为了客户端访问图片资源时,加载图片更流畅,体验更好,通常不会直接用原
- 双向链表(Doubly linked list)什么是双向链表?双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直
- 本文实例讲述了C#实现读取指定盘符硬盘序列号的方法。分享给大家供大家参考,具体如下:using System;using System.IO