Java開源工具庫Guava使用指南

Guava是一個功能強大的Java開源工具庫,提供了很多實用的工具類和函數,可以簡化開發過程。本文將介紹Guava的一些基本用法和常用功能。

添加Guava依賴

在開始使用Guava之前,首先需要在項目中添加Guava的依賴。可以通過Maven或Gradle來管理依賴。

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'

字符串處理

Guava提供了一些用于字符串處理的工具類和函數,可以方便地進行字符串操作。以下是一些常用的方法:

  • Strings.isNullOrEmpty(String):判斷字符串是否為null或空字符串。
  • Strings.nullToEmpty(String):將null轉換為空字符串。
  • Strings.emptyToNull(String):將空字符串轉換為null。
  • Strings.repeat(String, int):重復某個字符串指定的次數。
  • Strings.padStart(String, int, char):在字符串的開頭添加指定的字符,使其達到指定的長度。
  • Strings.padEnd(String, int, char):在字符串的末尾添加指定的字符,使其達到指定的長度。

集合操作

Guava提供了一套強大的集合操作工具,使得集合的處理更加簡便和高效。以下是一些常用的集合操作方法:

  1. 創建集合:

    • ImmutableList.of(element1, element2, ...):創建一個不可變的列表。
    • ImmutableSet.of(element1, element2, ...):創建一個不可變的集合。
    • ImmutableMap.of(key1, value1, key2, value2, ...):創建一個不可變的映射。
    • ImmutableMultimap.of(key1, value1, key2, value2, ...):創建一個不可變的多重映射。
  2. 集合操作:

    • Iterables.filter(Iterable, Predicate):過濾集合中滿足條件的元素。
    • Iterables.transform(Iterable, Function):對集合中的每個元素進行轉換。
    • Iterables.concat(Iterable1, Iterable2, ...):將多個集合合并成一個新的集合。
    • Iterables.partition(Iterable, int):將集合分成指定大小的子集。
  3. 集合排序:

    • Ordering.natural():自然排序。
    • Ordering.from(Comparator):根據給定的Comparator進行排序。
    • Ordering.compound(Iterable):使用多個排序規則進行排序。
    • Collections.sort(List, Comparator):對列表進行排序。
  4. 集合處理:

    • Lists.newArrayList(element1, element2, ...):創建一個可變的列表。
    • Sets.newHashSet(element1, element2, ...):創建一個可變的集合。
    • Maps.newHashMap():創建一個可變的映射。
    • Multimaps.newListMultimap():創建一個可變的多重映射。

緩存

Guava的緩存工具類使得緩存的使用變得更加簡單和高效。以下是一些常用的緩存操作方法:

  1. 創建緩存:

    • CacheBuilder.newBuilder().build():創建一個簡單的緩存。
    • CacheBuilder.newBuilder().maximumSize(long).build():設定緩存的最大容量。
    • CacheBuilder.newBuilder().expireAfterAccess(duration, TimeUnit).build():設置緩存項在指定時間內沒有被訪問后失效。
    • CacheBuilder.newBuilder().expireAfterWrite(duration, TimeUnit).build():設置緩存項在指定時間內沒有被寫入后失效。
  2. 緩存操作:

    • cache.put(key, value):將鍵值對放入緩存。
    • cache.getIfPresent(key):根據鍵獲取緩存中的值。
    • cache.get(key, Callable):根據鍵獲取緩存中的值,如果不存在則使用給定的Callable來計算并放入緩存。
    • cache.invalidate(key):根據鍵使緩存中的值失效。
    • cache.invalidateAll():使緩存中的所有值失效。

函數式編程

Guava提供了一些函數式編程的支持,可以更方便地進行函數操作。以下是一些常用的函數式編程方法:

  • Function:定義了一個函數接口,可以進行函數轉換和組合。
  • Predicate:定義了一個斷言接口,可以進行元素過濾。
  • Supplier:定義了一個供應商接口,可以生成值。
  • Optional:定義了一個可選值接口,可以處理可能為空的值。

異常處理

Guava提供了一些異常處理的工具類和函數,可以方便地進行異常處理。以下是一些常用的異常處理方法:

  • Throwables.getCause(Throwable):獲取異常的原因。
  • Throwables.getRootCause(Throwable):獲取異常的根原因。
  • Throwables.getStackTraceAsString(Throwable):將異常的堆棧軌跡轉換成字符串。
  • Throwables.propagate(Throwable):將異常重新拋出。

案例

案例一:使用Guava進行字符串拼接

Guava提供了一個方便的工具類Joiner,可以將多個字符串拼接成一個字符串。下面是一個使用案例:

import com.google.common.base.Joiner;public class StringJoiningExample {public static void main(String[] args) {String[] words = {"Hello", "Guava", "Joiner"};String joinedString = Joiner.on(", ").join(words);System.out.println(joinedString);}
}

運行以上代碼,輸出結果為:

Hello, Guava, Joiner

在這個案例中,我們使用了Joiner.on(", ")創建了一個拼接器,然后使用join方法將數組words中的字符串用逗號加空格拼接起來。

案例二:使用Guava進行集合過濾

Guava提供了一個工具類Collections2,可以對集合進行過濾操作。下面是一個使用案例:

import com.google.common.collect.Collections2;import java.util.Arrays;
import java.util.Collection;public class CollectionFilterExample {public static void main(String[] args) {Collection<String> words = Arrays.asList("apple", "banana", "cherry", "durian");Collection<String> filteredWords = Collections2.filter(words, word -> word.length() > 5);System.out.println(filteredWords);}
}

運行以上代碼,輸出結果為:

[banana, cherry]

在這個案例中,我們使用Collections2.filter方法對集合words進行過濾,只保留長度大于5的字符串。

案例三:使用Guava的緩存功能

Guava的緩存工具類CacheBuilder可以方便地實現緩存功能。下面是一個使用案例:

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;public class CacheExample {public static void main(String[] args) {Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(100).build();cache.put("key1", "value1");cache.put("key2", "value2");String value1 = cache.getIfPresent("key1");String value2 = cache.getIfPresent("key2");System.out.println(value1);System.out.println(value2);}
}

運行以上代碼,輸出結果為:

value1
value2

在這個案例中,我們使用CacheBuilder.newBuilder().maximumSize(100).build()創建了一個最大容量為100的緩存。然后使用put方法將鍵值對放入緩存,使用getIfPresent方法獲取緩存中的值。

通過以上三個案例,我們可以看到Guava提供的一些常用功能在實際開發中的應用場景。這些功能可以大大簡化開發過程,并提高代碼的可讀性和可維護性。

總結

本文介紹了Java開源工具庫Guava的一些基本用法和常用功能。通過使用Guava,可以簡化開發過程,提高開發效率。希望本文對您有所幫助,讓您更好地使用Guava進行Java開發。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210957.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210957.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210957.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Centos7.9下的celery無法直接使用-沒有找到命令

問題 關于centos7.9下執行celery -A project worker -l debug -P eventlet 找不到celery命令 -bash: celery: command not found 解決辦法 # /usr/local/Python3 為你的python路徑 echo export PATH/usr/local/Python3/bin:$PATH >> /etc/profile.d/python3.sh source /…

在循環內錯誤使用函數定義(js的問題)

考慮下面代碼&#xff1a; var elements document.getElementsByTagName(input); var n elements.length; // Assume we have 10 elements for this example for (var i 0; i < n; i) {elements[i].onclick function() {console.log("This is element #" …

利用WSL Linux編譯OpenBMC

WSL2安裝 &#xff08;1&#xff09; 舊版 WSL 的手動安裝步驟 | Microsoft Learn &#xff08;2&#xff09; https://www.cnblogs.com/37yan/p/16169564.html &#xff08;3&#xff09; 在win10中安裝linux--使用WSL_wsl.conf-CSDN博客 安裝Ubuntu 18.04 on Windows 安…

聯合體和枚舉

聯合體&#xff1a; 聯合體是什么&#xff1f; 聯合體也是一種自定義類型&#xff0c;這種類型定義的變量也包含一系列類型&#xff0c;特征是這些類型公用一塊內存空間(所以叫聯合體也叫公用體)可以理解為結構體公用一塊內存。 //聯合-聯合體-共用體 //聯合也是一種特殊的自…

TOMCAT9安裝

1、官網下載 2、解壓到任意盤符&#xff0c;注意路徑不要有中文 3、環境變量 path 下 配置 %CATALINA_HOME%\bin 4、找到tomcat9/bin&#xff0c; 點擊 start.bat啟動 tomcat

目標檢測、目標跟蹤、重識別

文章目錄 環境前言項目復現特征提取工程下載參考資料 環境 ubuntu 18.04 64位yolov5deepsortfastreid 前言 基于YOLOv5和DeepSort的目標跟蹤 介紹過針對行人的檢測與跟蹤。本文介紹另一個項目&#xff0c;結合 FastReid 來實現行人的檢測、跟蹤和重識別。作者給出的2個主…

jsp 設備預約管理系統Myeclipse開發mysql數據庫web結構java編程計算機網頁項目

一、源碼特點 JSP 設備預約管理系統是一套完善的java web信息管理系統&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為 TOMCAT7.0,Myeclipse8.5開發&#xff0c;數據庫為Mysql5.0…

SQL命令---添加新字段

介紹 使用sql語句為表添加新字段。 命令 alter table 表名 add 新字段名 數據類型;例子 向a表中添加name字段&#xff0c;類型為varchar(255)。 alter table a add name varchar(255);下面是執行添加有的表結構&#xff1a;

TimescaleDB-1 安裝

前置條件&#xff1a; 1、操作系統ubuntu2204 2、已經通過apt的方式安裝了pg14 當然其他的操作系統&#xff0c;官方文檔中也有說明。 一、安裝 https://docs.timescale.com/self-hosted/latest/install/installation-linux/ Installing self-hosted TimescaleDB on Debian-…

springboot+jdbcTemplate+sqlite編程示例——以滬深300成分股數據處理為例

引言 我們在自己做一些小的項目或者小的數據處理分析的時候&#xff0c;很多時候是不需要用到mysql這樣的大型數據庫&#xff0c;并且也不需要用到maven這樣很重的框架的&#xff0c;取而代之可以使用jdbcTemplatesqlite這樣的組合。 本文就介紹一下使用springbootjdbcTempla…

課堂練習3.4:進程的切換

3-9 課堂練習3.4:進程的切換 進程切換是支持多進程的一個關鍵環節,涉及到 CPU 現場的保存和恢復,本實訓分析 Linux 0.11 的進程切換過程。 第1關第一次進程切換過程分析 任務描述 本關任務回答問題: 在第一次進程切換時: 1.是從幾號進程切換到幾號進程?0 號進程和 1 號…

Linux指令——scp:傳輸文件

Linux指令——scp&#xff1a;傳輸文件 簡介&#xff1a; Linux文件互傳指令 使用方法&#xff1a; scp [可選參數] file_source file_target # 可選參數一般為-r&#xff0c;遞歸傳輸 # 舉例如下&#xff1a; scp /home/test/test.txt root192.168.1.200:/home/test/tes…

Java線程概念詳解

線程 概念 1.程序:未解決某種問題,使用計算機語言編寫的一些列指令(代碼)的集合 2.進程:正在運行的程序(被加載到內存中),是操作系統進行資源分配的最小單位 3.線程:進程可以進一步細化為線程(比進程更小)且線程是隸屬于進程的,是操作系統執行的最小的執行單元 也是cpu進行任…

CleanMyMac X2024免費許可證(激活教程)

CleanMyMac X是一款流行的系統優化工具&#xff0c;專為Mac用戶設計。它可以幫助用戶清理Mac系統中的垃圾文件、卸載不需要的程序、加速Mac性能以及保護Mac系統的安全。 一、簡介 CleanMyMac X是一款功能強大的系統優化工具&#xff0c;它可以幫助用戶清理Mac系統中的垃圾文件…

優麒麟ubuntukylin安裝UE4.27.2

優麒麟ubuntukylin安裝UE4.27.2 在&#xff08;國產&#xff09;優麒麟 ubuntukylin Linux平臺上編譯測試安裝虛幻引擎。 優麒麟系統 這里選擇的是官方增強版 https://www.ubuntukylin.com/downloads/ 同樣的可以選擇對應的Ubuntu22.04 LTS&#xff0c;唯一的區別就是優麒麟…

【精選】SpringMVC簡介及其執行流程,參數獲取方式

SpringMVC簡介 MVC模型 MVC全稱Model View Controller&#xff0c;是一種設計創建Web應用程序的模式。這三個單詞分別代表Web應用程序的三個部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;指數據模型。用于存儲數據以及處理用戶請求的業務邏輯。在Web應用中&…

采用NSD評估ADC性能

概要 評估采樣器的傳統性能指標SNR、SFDR和ENOB最早被用于二戰時期,這些性能指標使用于具有通道選擇性和低通采樣使用的ADC,并不適用于近些年的射頻直采ADC,因此需要引入更合適的噪聲譜密度NSD(Noise Spectrum Density)指標來評估噪聲性能。 傳統技術指標的含義 無雜散…

async函數和await表達式

async函數 函數的返回值為promise對象 &#xff08;Promise介紹&#xff09;promise對象的結果由async函數執行的返回值決定&#xff0c;如果對象內返回非promise對象&#xff0c;比如字符串&#xff0c;那么返回結果是成功的promise對象&#xff0c;如果返回的是promise對象&…

Photoshop Circular Text

Ctrl N 新增 現學現賣

uniapp移動端懸浮按鈕(吸附邊緣)

Uniapp移動端懸浮按鈕可以通過CSS實現吸附邊緣的效果。具體實現步驟如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…