java guava主要功能介绍及使用心得总结

目录
  • 1. 前言
  • 2. Guava主要功能介绍
    • 2.1 集合操作
    • 2.2 缓存
    • 2.3 字符串处理
    • 2.4 函数式编程
    • 2.5 其他实用工具
  • 3. 结论

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开发者带来了极大的便利。还等什么,这么好用的框架赶紧用起来吧。

以上就是java guava主要功能介绍及使用心得总结的详细内容,更多关于java guava使用心得总结的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java项目Guava包 HashMultimap使用及注意事项

    目录 1. 数据模型介绍 2. 简单使用介绍 2.1 容器创建 2.2 添加元素 2.3 移除元素 2.4 替换元素 2.5 获取元素及遍历 2.6 输出所有的key 2.7 输出所有的value 3. 小结 今天给大家介绍一个相对基础的知识点 HashMultmap: guava基本上可以说是java开发项目中,大概率会引入的包,今天介绍的主角是一个特殊的容器 -- HashMultmap,可以简单的将它的数据结构理解为Map<K, Set<V>> 那么为什么会突然想到介绍一下它

  • Java效率提升神器之Guava-Joiner

    目录 Joiner Joiner.MapJoiner 源代码分析 拼接Map键值对 姊妹篇:Java效率提升神器jOOR 在我们的开发中经常会用到Guava中的一些功能.但是我们所使用到的只是Guava API中的小的可怜的一个子集.我们大家一起来发掘一下Guava中更多的一些功能. Joiner 这是在我们代码中出现频率比较高的一个功能.经常需要将几个字符串,或者字符串数组.列表之类的东西,拼接成一个以指定符号分隔各个元素的字符串,比如要将一个用List保存的字符集合拼起来作为SQL语句的条件

  • 浅谈Java中GuavaCache返回Null的注意事项

    Guava在实际的Java后端项目中应用的场景还是比较多的,比如限流,缓存,容器操作之类的,有挺多实用的工具类,这里记录一下,在使用GuavaCache,返回null的一个问题 I. 常见使用姿势 @Test public void testGuava() { LoadingCache<String, String> cache = CacheBuilder.newBuilder().build(new CacheLoader<String, String>() { @Overri

  • java的Guava工具包介绍

    集合 普通集合 List<String> list = Lists.newArrayList(); Set<String> set = Sets.newHashSet(); Map<String, String> map = Maps.newHashMap(); Set 取交集.并集.差集 HashSet<Integer> setA = Sets.newHashSet(1, 2, 3, 4, 5); HashSet<Integer> setB =

  • Java Guava排序器Ordering原理及代码实例

    一 创建排序器 排序器:可以用来为构建复杂的比较器,以完成集合排序的功能: 本质上来说,Ordering 实例无非就是一个特殊的Comparator 实例. Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法), 并且提供了链式调用方法,来定制和增强现有的比较器 //创建排序器 @Test public void createOreing(){ //对可排序类型做自然排序,如数字按大小,日期按先后排序 Ordering<C

  • Java开发利器之Guava Cache的使用教程

    目录 前言 缓存的意义 Guava Cache特色 API介绍 Builder配置 简单示例 本地缓存 前言 缓存技术被认为是减轻服务器负载.降低网络拥塞.增强Web可扩展性的有效途径之一,其基本思想是利用客户访问的时间局部性(Temproral Locality)原理, 将客户访问过的内容在Cache中存放一个副本,当该内容下次被访问时,不必连接到驻留网站,而是由Cache中保留的副本提供. 在企业Web应用中,通过缓存技术能够提高请求的响应速度:减少系统IO开销:降低系统数据读写压力...

  • 初学java常用开发工具介绍

    Java的应用越来越广泛,学习Java的人也越来越多.学过程序设计的人知道,使用Basic进行程序设计,可以使用QBasic.Visual Basic等开发工具:使用C语言进行程序设计,可以使用Turbo C.Visual C++.C++ Builder等开发工具.这些开发工具集成了编辑器和编译器,是集成开发工具,很方便使用.学习Java程序设计,同样需要方便易用的开发工具.Java的开发工具很多,而且各有优缺点,初学者往往不知道有哪些常用的开发工具,或者由于面临的选择比较多而产生困惑.本文对初

  • java 中的封装介绍及使用方法

    java 中的封装介绍及使用方法 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问. 要访问该类的代码和数据,必须通过严格的接口控制. 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段. 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性. 封装的优点 1. 良好的封装能够减少耦合. 2. 类内部

  • Java实现发送邮件功能时碰到的坑

    之前用163邮箱发邮件时明明是成功的,但是使用中国移动自己的邮箱时,无论如何在linux服务器中都发送不成功,一开始报如下错误: javax.mail.MessagingException: Unknown SMTP host: mail.chinamobilesz.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1959) ~ [mail-1.4.7.jar:1.4.7] at com.sun.mail.

  • Java 中的 BufferedReader 介绍_动力节点Java学院整理

    BufferedReader 介绍 BufferedReader 是缓冲字符输入流.它继承于Reader. BufferedReader 的作用是为其他字符输入流添加一些缓冲功能. BufferedReader 函数列表 BufferedReader(Reader in) BufferedReader(Reader in, int size) void close() void mark(int markLimit) boolean markSupported() int read() int

  • Java实现记事本功能

    今天给大家介绍一下关于如何用Java实现记事本功能,是学习Java swing的一个非常好的案例,下面先看一下运行结果: 下面我们来看源码: import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import java.io.*; import javax.swing.undo.*; import javax.swing.border.*; import javax.swing.*;

  • Java生成验证码功能实例代码

    页面上输入验证码是比较常见的一个功能,实现起来也很简单.给大家写一个简单的生成验证码的示例程序,需要的朋友可以借鉴一下. 闲话少续,直接上代码.代码中的注释很详细. package com.SM_test.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import ja

  • Java 实现倒计时功能(由秒计算天、小时、分钟、秒)

    有时候会要求实现这样一个需求: 天.小时.分钟.秒的数值都是隔开的,服务器端只返回一个时间戳长度. 以下就是我的实现方案,力求减少对象生成.减小计算量: import java.util.Timer; import java.util.TimerTask; public class CountDownUtils { private static long day = 0; private static long hour = 0; private static long minute = 0;

  • Java实现搜索功能代码详解

    首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是Get请求,并且是向当前页面发送Get请求 //示例代码 请求路径为当前页面路径 "/product" <!-- 搜索框 get请求 根据商品名称的关键字进行搜索--> <form action="/product" class="form-inline pull-left" > <input type="text" name="pr

  • java生成图片验证码功能

    最近在用ssm框架做一个管理系统,做到登录验证时,使用了下面的代码生成图片验证码,最终的效果如下图. Java类 public class RandomValidateCode { public static final String RANDOMCODEKEY = "randomcode_key";//放到session中的key private Random random = new Random(); private String randString = "01234

  • 如何实现java Iterator迭代器功能

    这篇文章主要介绍了如何实现java Iterator迭代器功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天躺在床上忽然想到一个问题,迭代器的代码是如何实现的? 于是乎不由自主的爬起来敲两行代码. List<String> list=new ArrayList<>(2); list.add("java"); list.add("C#"); Iterator<String>

随机推荐