国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

推薦Java開發(fā)常用的工具類庫google guava

這篇具有很好參考價(jià)值的文章主要介紹了推薦Java開發(fā)常用的工具類庫google guava。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Guava

Guava是一個(gè)Google開源的Java核心庫,它提供了許多實(shí)用的工具和輔助類,使Java開發(fā)更加簡潔、高效、可靠。目前和hutool一起,是業(yè)界常用的工具類庫。shigen也比較喜歡使用,在這里列舉一下常用的工具類庫和使用的案例。

參考:

  • 整理一波Guava的使用技巧 - 掘金
  • Guava中這些Map的騷操作,讓我的代碼量減少了50% - 掘金

pom依賴

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.1.1-jre</version>
</dependency>

Map

Table-雙鍵map

Table 接口可以看作是一個(gè)類似于矩陣的數(shù)據(jù)結(jié)構(gòu),它包含兩個(gè)鍵:行鍵和列鍵。它的主要特點(diǎn)是可以通過兩個(gè)鍵來定位和訪問值, 它的類型:Table<R,C,V>

基礎(chǔ)的api
行列的轉(zhuǎn)制
public static <R, C, V> Table<C, R, V> transpose(Table<R, C, V> table) {
    return (Table)(table instanceof Tables.TransposeTable ? ((Tables.TransposeTable)table).original : new Tables.TransposeTable(table));
}
轉(zhuǎn)換成嵌套的map
Map<String, Map<String, Integer>> rowMap = table.rowMap();
Map<String, Map<String, Integer>> columnMap = table.columnMap();

BiMap-雙向map

根據(jù)value快速找到key,所以要求key 和value都是唯一的

  • inverse方法反轉(zhuǎn)了原來BiMap的鍵值映射,但是這個(gè)反轉(zhuǎn)后的BiMap并不是一個(gè)新的對象,它實(shí)現(xiàn)了一種視圖的關(guān)聯(lián),所以對反轉(zhuǎn)后的BiMap執(zhí)行的所有操作會(huì)作用于原先的BiMap上。
  • 繼承hashMap,key、value都不能重復(fù)的

MultiMap-多值map

一個(gè)鍵映射到多個(gè)值上,底層是Map<String, List>

創(chuàng)建和轉(zhuǎn)換
Multimap<String, String> multiMap = ArrayListMultimap.create();
multiMap.putAll("name", Arrays.asList("shigen", "aaa", "bbb"));
Collection<String> names = multiMap.get("name");
Map<String, Collection<String>> stringCollectionMap = multiMap.asMap();

RangeMap-范圍map

RangeMap描述了一種從區(qū)間到特定值的映射關(guān)系,讓我們能夠以更為優(yōu)雅的方法來書寫代碼

分?jǐn)?shù)段判斷案例

‘com.google.common.collect.RangeMap’ is marked unstable with @Beta

shigen 覺得這個(gè)很好用,為我們省略了很多根據(jù)區(qū)間判斷的if-else代碼

RangeMap<Integer, String> rangeMap = TreeRangeMap.create();
rangeMap.put(Range.closedOpen(0,60),"fail");
rangeMap.put(Range.closed(60,90),"satisfactory");
rangeMap.put(Range.openClosed(90,100),"excellent");

System.out.println(rangeMap.get(59));
System.out.println(rangeMap.get(60));
System.out.println(rangeMap.get(90));
System.out.println(rangeMap.get(91));

ClassToInstanceMap-實(shí)例Map

它的鍵是Class,而值是這個(gè)Class對應(yīng)的實(shí)例對象(Map<Class, List<Object>)。取出對象時(shí)省去了強(qiáng)制類型轉(zhuǎn)換,避免手動(dòng)類型轉(zhuǎn)換失誤。

適合緩存對象,但是又不想做復(fù)雜的校驗(yàn)

MutableClassToInstanceMap<List> listMutableClassToInstanceMap = MutableClassToInstanceMap.create();
ArrayList<String> strings = new ArrayList<>();
strings.add("1111");
listMutableClassToInstanceMap.putInstance(ArrayList.class, strings);
ArrayList instance = listMutableClassToInstanceMap.getInstance(ArrayList.class);
// true
System.out.println(strings == instance);

Strings

  • isNullOrEmpty(String string):判斷字符串是否為空或null。
  • padEnd(String string, int minLength, char padChar):在字符串末尾填充指定字符,直到字符串達(dá)到指定長度。
  • padStart(String string, int minLength, char padChar):在字符串開頭填充指定字符,直到字符串達(dá)到指定長度。
  • repeat(String string, int count):重復(fù)指定字符串指定次數(shù)。
  • commonPrefix(CharSequence a, CharSequence b):獲取兩個(gè)字符串的最長公共前綴。
  • commonSuffix(CharSequence a, CharSequence b):獲取兩個(gè)字符串的最長公共后綴。

這一塊 shigen還是習(xí)慣了使用hutoolstrUtil,很符合我的代碼編程習(xí)慣。

Collections

  1. ImmutableList

不可變集合是Guava的一個(gè)重要特性,它可以確保集合不被修改,從而避免并發(fā)訪問的問題

List<String> list = Lists.newArrayList("a", "b", "c");
ImmutableList<String> immutableList = ImmutableList.copyOf(list);
  1. Iterables

獲得元素的API
獲得符合條件的元素
轉(zhuǎn)換集合類型

條件檢查(Preconditions)

Preconditions是Guava提供的一組前置條件檢查工具,它提供了一些檢查參數(shù)是否符合預(yù)期的方法。

shigen 覺得這個(gè)和assert很相像。

以下是Preconditions的主要方法:

  • checkArgument(boolean expression, String errorMessageTemplate, Object... errorMessageArgs):檢查參數(shù)是否符合預(yù)期,并拋出IllegalArgumentException異常,可以包含錯(cuò)誤信息模板和占位符。
  • checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs):檢查參數(shù)是否為null,并拋出NullPointerException異常,可以包含錯(cuò)誤信息模板和占位符。
  • checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs):檢查對象狀態(tài)是否符合預(yù)期,并拋出IllegalStateException異常,可以包含錯(cuò)誤信息模板和占位符。
  • checkElementIndex(int index, int size, String errorMessageTemplate, Object... errorMessageArgs):檢查下標(biāo)是否在集合的范圍內(nèi),并拋出IndexOutOfBoundsException異常,可以包含錯(cuò)誤信息模板和占位符。
  • checkPositionIndex(int index, int size, String errorMessageTemplate, Object... errorMessageArgs):檢查下標(biāo)是否在集合的范圍內(nèi),可以等于集合的大小,并拋出IndexOutOfBoundsException異常,可以包含錯(cuò)誤信息模板和占位符。
  • checkPositionIndexes(int start, int end, int size):檢查開始下標(biāo)和結(jié)束下標(biāo)是否在集合的范圍內(nèi),并拋出IndexOutOfBoundsException異常。
public class PreconditionsDemo {
    public static void main(String[] args) {
        // 檢查參數(shù)是否符合預(yù)期,并拋出IllegalArgumentException異常,可以包含錯(cuò)誤信息模板和占位符
        String str1 = "abc";
        Preconditions.checkArgument(str1.length() < 3, "字符串長度必須小于3");
        // 檢查參數(shù)是否為null,并拋出NullPointerException異常,可以包含錯(cuò)誤信息模板和占位符
        String str2 = null;
        Preconditions.checkNotNull(str2, "字符串不能為空");
        // 檢查對象狀態(tài)是否符合預(yù)期,并拋出IllegalStateException異常,可以包含錯(cuò)誤信息模板和占位符
        boolean flag1 = false;
        Preconditions.checkState(flag1, "狀態(tài)不正確");
        // 檢查下標(biāo)是否在集合的范圍內(nèi),并拋出IndexOutOfBoundsException異常,可以包含錯(cuò)誤信息模板和占位符
        List<Integer> list1 = Lists.newArrayList(1, 2, 3, 4, 5);
        Preconditions.checkElementIndex(6, list1.size(), "下標(biāo)越界");
        // 檢查下標(biāo)是否在集合的范圍內(nèi),可以等于集合的大小,并拋出IndexOutOfBoundsException異常,可以包含錯(cuò)誤信息模板和占位符
        List<Integer> list2 = Lists.newArrayList(1, 2, 3, 4, 5);
        Preconditions.checkPositionIndex(5, list2.size(), "下標(biāo)越界");
        // 檢查開始下標(biāo)和結(jié)束下標(biāo)是否在集合的范圍內(nèi),并拋出IndexOutOfBoundsException異常
        List<Integer> list3 = Lists.newArrayList(1, 2, 3, 4, 5);
        Preconditions.checkPositionIndexes(2, 6, list3.size());
        // 可以在錯(cuò)誤信息中使用占位符
        int value1 = 101;
        Preconditions.checkArgument(value1 <= 100, "值必須小于等于 %s", 100);
        // 可以使用Supplier來避免計(jì)算開銷
        int value2 = 101;
        Preconditions.checkArgument(value2 <= 100, () -> "值必須小于等于 " + 100);
}

cacheBuilder

Cache是Guava提供的一個(gè)緩存工具類,它可以幫助我們在內(nèi)存中緩存數(shù)據(jù)。

  1. 緩存加載:指定緩存加載機(jī)制??梢酝ㄟ^傳遞一個(gè) CacheLoader 對象來定義如何加載緩存中不存在的數(shù)據(jù)。CacheLoader 是一個(gè)抽象類,需要實(shí)現(xiàn) load 方法,用于根據(jù)鍵加載對應(yīng)的值。
  2. 緩存大小限制:設(shè)置緩存的最大容量,當(dāng)緩存超過設(shè)定的容量時(shí),可以通過一些策略(比如使用 LRU 或 FIFO)來自動(dòng)淘汰一些不常用的緩存項(xiàng)。可以使用 maximumSize 方法設(shè)置緩存的最大容量。
  3. 過期時(shí)間:為緩存項(xiàng)設(shè)置過期時(shí)間??梢酝ㄟ^ expireAfterWrite 或 expireAfterAccess 方法設(shè)置緩存項(xiàng)的寫入或訪問后的過期時(shí)間。
  4. 弱引用鍵或值:CacheBuilder 提供了一些選項(xiàng),可以使用弱引用持有緩存的鍵或值。當(dāng)沒有其他地方引用某個(gè)鍵或值時(shí),緩存會(huì)自動(dòng)將其從內(nèi)存中移除,以避免內(nèi)存泄漏。
  5. 統(tǒng)計(jì)信息:CacheBuilder 提供了一些統(tǒng)計(jì)信息,包括緩存的命中率、加載次數(shù)、加載成功率等??梢酝ㄟ^調(diào)用 recordStats 方法開啟統(tǒng)計(jì)信息的收集。
@SneakyThrows
private static void testCache() {
    // 創(chuàng)建一個(gè)緩存實(shí)例
    Cache<String, String> cache = CacheBuilder.newBuilder()
        // 最大容量為100個(gè)緩存項(xiàng)
        .maximumSize(100)
        // 10分鐘后過期
        .expireAfterWrite(10, TimeUnit.MINUTES)
        .build();

    // 向緩存中存入數(shù)據(jù)
    cache.put("key1", "value1");
    cache.put("key2", "value2");

    // 從緩存中獲取數(shù)據(jù)
    String value1 = cache.getIfPresent("key1");
    // 輸出: Value1: value1
    System.out.println("Value1: " + value1);

    // 存中存在,則返回對應(yīng)的值;如果緩存中不存在,則使用提供的函數(shù)加載新的值,并將其添加到緩存中
    String value3 = cache.get("key3", () -> "value3");
    // 輸出: Value3: value3
    System.out.println("Value3: " + value3);

    // 獲取緩存的統(tǒng)計(jì)信息
    CacheStats stats = cache.stats();
    // 輸出: Hit Rate: 1.0
    System.out.println("Hit Rate: " + stats.hitRate());
}

以上就是這些常用的使用場景了。也歡迎伙伴們交流一下常用的工具庫的方法。

shigen一起,每天不一樣!文章來源地址http://www.zghlxwxcb.cn/news/detail-696346.html

到了這里,關(guān)于推薦Java開發(fā)常用的工具類庫google guava的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java零基礎(chǔ)入門篇】第 ⑦ 期 - 常用類庫

    【Java零基礎(chǔ)入門篇】第 ⑦ 期 - 常用類庫

    博主:命運(yùn)之光 專欄:Java零基礎(chǔ)入門 ? 學(xué)習(xí)目標(biāo) 掌握J(rèn)ava各種常用類庫的使用方法。 目錄 Java類庫 字符串String String 概述 創(chuàng)建字符串對象的2種方式 String類的特點(diǎn) 創(chuàng)建字符串對象的2種方式 總結(jié):創(chuàng)建字符串對象的2種方式區(qū)別 字符串的比較 字符串的比較 String類其它常用

    2024年02月04日
    瀏覽(22)
  • Java中JDK類庫常用的6種設(shè)計(jì)模式

    Java中JDK類庫常用的6種設(shè)計(jì)模式: 1、抽象工廠。2、建造者模式。3、工廠模式。4、原型模式。5、單例模式。6、適配器模式。 javax.xml.parsers. DocumentBuilderFactory 抽象類。 public static DocumentBuilderFactory newInstance ()方法。 類功能:使得應(yīng)用程序可以 通過XML文件,獲得一個(gè)能生成DO

    2024年02月04日
    瀏覽(21)
  • 【Java基礎(chǔ)教程】(三十六)常用類庫篇 · 第六講:數(shù)學(xué)運(yùn)算類——全面講解Java數(shù)學(xué)計(jì)算支持類庫,BigDecimal、Math、Random、DecimalFormat...~

    【Java基礎(chǔ)教程】(三十六)常用類庫篇 · 第六講:數(shù)學(xué)運(yùn)算類——全面講解Java數(shù)學(xué)計(jì)算支持類庫,BigDecimal、Math、Random、DecimalFormat...~

    在現(xiàn)代軟件開發(fā)中,數(shù)學(xué)計(jì)算是不可或缺的一部分。為了滿足企業(yè)及開發(fā)人員對數(shù)學(xué)運(yùn)算的需求,Java 提供了一系列強(qiáng)大而豐富的數(shù)學(xué)計(jì)算相關(guān)類,其中包括 Math 、 Random 、 BigDecimal 等等。這些類旨在提供高度精確和可靠的數(shù)學(xué)操作,使開發(fā)人員能夠處理任何規(guī)模和復(fù)雜度的定

    2024年02月16日
    瀏覽(26)
  • Google 開源庫Guava詳解(集合工具類)—Maps、Multisets、Multimaps

    Maps有許多很酷的實(shí)用程序,值得單獨(dú)解釋。 Maps.uniqueIndex(Iterable,F(xiàn)unction)解決了一個(gè)常見的情況,即有一堆對象,每個(gè)對象都有一些唯一的屬性,并希望能夠根據(jù)該屬性查找這些對象。 假設(shè)我們有一堆字符串,我們知道它們有唯一的長度,我們希望能夠查找具有特定長度

    2024年02月03日
    瀏覽(27)
  • 代碼量原地縮減50%,這個(gè)Java工具類庫太香了

    代碼量原地縮減50%,這個(gè)Java工具類庫太香了

    Guava是google公司開發(fā)的一款Java類庫擴(kuò)展工具包,內(nèi)含了豐富的API,涵蓋了集合、緩存、并發(fā)、I/O等多個(gè)方面。使用這些API一方面可以簡化我們代碼,使代碼更為優(yōu)雅,另一方面它補(bǔ)充了很多jdk中沒有的功能,能讓我們開發(fā)中更為高效。 今天給大家分享的就是Guava中封裝的一些

    2024年02月05日
    瀏覽(17)
  • JAVA開發(fā)常用測試工具

    JAVA開發(fā)常用測試工具

    什么是junit JUnit 是一個(gè)用于編寫和運(yùn)行單元測試的開源框架,是Java 開發(fā)中最常用的單元測試框架之一。它為 Java 開發(fā)者提供了一種簡單、靈活且可擴(kuò)展的方式來編寫自動(dòng)化測試代碼,并幫助開發(fā)者進(jìn)行單元測試的管理和執(zhí)行。 JUnit 提供了一組注解和斷言方法,使開發(fā)者能夠

    2024年04月25日
    瀏覽(37)
  • java開發(fā)常用的工具以及配置類

    今天接著上一篇博文,聊 java開發(fā)常用的工具以及配置類。 13 日期操作相關(guān)的java類。 比如在開發(fā)預(yù)約旅游 預(yù)約體檢 預(yù)約售票等相關(guān)和日期相關(guān)的業(yè)務(wù),需要獲取日期以及判斷是一周的哪一天等。 14 處理請求路徑的URL工具類 比如,有時(shí)需要根據(jù)傳入的路徑url獲取請求參數(shù)或

    2024年02月08日
    瀏覽(19)
  • 【Java基礎(chǔ)教程】(三十八)常用類庫篇 · 第八講:數(shù)組操作類——解析Arrays類中的全部操作方法,解鎖Java數(shù)組操作技巧~

    【Java基礎(chǔ)教程】(三十八)常用類庫篇 · 第八講:數(shù)組操作類——解析Arrays類中的全部操作方法,解鎖Java數(shù)組操作技巧~

    前言:在學(xué)習(xí)本文之前,應(yīng)該先學(xué)習(xí)并清楚了解Java基礎(chǔ)部分的數(shù)組相關(guān)的概念和知識(shí)。 若還不具備學(xué)習(xí)條件,請先前往學(xué)習(xí)數(shù)組部分的基礎(chǔ)知識(shí): 《【Java基礎(chǔ)教程】(八)面向?qū)ο笃?· 第二講:Java 數(shù)組全面解析——?jiǎng)討B(tài)與靜態(tài)初始化、二維數(shù)組、方法參數(shù)傳遞、排序與轉(zhuǎn)

    2024年02月15日
    瀏覽(45)
  • 【Java基礎(chǔ)教程】(三十二)常用類庫篇 · 第二講:包裝類 Wrapper Class——概念及用途, 自動(dòng)裝箱與拆箱,常用操作方法~

    【Java基礎(chǔ)教程】(三十二)常用類庫篇 · 第二講:包裝類 Wrapper Class——概念及用途, 自動(dòng)裝箱與拆箱,常用操作方法~

    在Java編程中,包裝類(Wrapper Class)是一種特殊的類,它們允許將基本數(shù)據(jù)類型包裝(Wrap)成對象。每個(gè)原始數(shù)據(jù)類型都有對應(yīng)的包裝類,例如 Integer 對應(yīng)整型, Double 對應(yīng)浮點(diǎn)型等。包裝類提供了一些有用的方法和功能,方便我們操作和處理與原始數(shù)據(jù)類型相關(guān)的數(shù)據(jù)。

    2024年02月15日
    瀏覽(27)
  • 【Java基礎(chǔ)教程】(三十三)常用類庫篇 · 第三講:可變字符串支持類——解析 StringBuffer與 StringBuilder類~

    【Java基礎(chǔ)教程】(三十三)常用類庫篇 · 第三講:可變字符串支持類——解析 StringBuffer與 StringBuilder類~

    在Java 中,字符串使用 String 類進(jìn)行表示,但是 String 類所表示的字符串有一個(gè)最大的問題:“字符串常量一旦聲明則不可改變,而字符串對象可以改變,但是 改變的是其內(nèi)存地址的指向”。所以 String 類不適合于被頻繁修改的字符串操作, 所以在這種情況下,往往可以使用

    2024年02月15日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包