成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

有用的guava(一)

張憲坤 / 1222人閱讀

摘要:尼古拉斯沃茲基碩德我們已經(jīng)有了,為什么還需要另外一個庫呢因為好用唄日常編碼中經(jīng)常會遇到下面的代碼經(jīng)過的修剪后可以變成這樣甚至這樣其實這種結(jié)構(gòu),就是一個二維映射,把它包裝成了。但的完美處理雙向映射。當(dāng)然,在使用時,會要求的唯一性。

Google Guava是把小巧又鋒利的瑞士軍刀,把你的代碼修剪得整潔又漂亮。
-------------尼古拉斯·沃茲基碩德

1. Google Collections

我們已經(jīng)有Apache Commons Collections了,為什么還需要另外一個collections庫呢?
因為好用唄!

日常編碼中經(jīng)常會遇到下面的代碼:

Map> map = new HashMap>();

經(jīng)過Guava的修剪后可以變成這樣:

Map> map = Maps.newHashMap();

甚至這樣:

Table tab = HashBaseTable.create();
//其實這種結(jié)構(gòu),就是一個二維映射,Guava把它包裝成了table。
//還沒完,變成這樣后,訪問起來比之前方便多了,直接拿兩個維度去拿結(jié)果。
String res = tab.get("1", "1");

當(dāng)然Lists和Sets也有這樣的用法:
Lists.newArrayList();
Sets.newHashSet();

有時候我們需要一些測試數(shù)據(jù)構(gòu)造一個不可變的List,一般都會這么寫:

List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

有了Guava可以這樣:

ImmutableList of = ImmutableList.of("a", "b", "c", "d");

Map也一樣

ImmutableMap map = ImmutableMap.of("key1", "value1", "key2", "value2");

有時候要用到雙向映射,比如說根據(jù)學(xué)號查詢名字和根據(jù)名字查詢學(xué)號,這時候一般都需要建兩個Map分別由學(xué)號映射到名字,由名字映射到學(xué)號。
但Guava的BiMap完美處理雙向映射。

        BiMap idNameMap = HashBiMap.create(); 
        idNameMap.put(1,"xiaohong");
        idNameMap.put(2,"xiaoming");
        idNameMap.put(3,"xiaolan"); 
        System.out.println("idNameMap:"+idNameMap); 
        BiMap nameIdMap = idNameMap.inverse();
        System.out.println("nameIdMap:"+nameIdMap);

當(dāng)然,在使用BiMap時,會要求Value的唯一性。如果value重復(fù)了則會拋出錯誤:java.lang.IllegalArgumentException。
inverse()會返回一個反轉(zhuǎn)的BiMap,但是注意這個反轉(zhuǎn)的map不是新的map對象,只是與原始map的一種關(guān)聯(lián),這樣你對于反轉(zhuǎn)后的map的所有操作都會影響原始的map對象。

2. 文件操作

為了從文件中讀取內(nèi)容一般操作如下:

File file = new File(getClass().getResource("/aaa.txt").getFile());
BufferedReader reader;
String text = "";
try {
    reader = new BufferedReader(new FileReader(file));
    String line = null;
    while (true) {
        line = reader.readLine();
        if (line == null) {
            break;
        }
        text += line.trim() + "
";
    }
    reader.close();
    reader = null;
} catch (FileNotFoundException e1) {
    e1.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Guava看了之后說:太長了,看我的:

File file = new File(getClass().getResource("/aaa.txt").getFile());
List lines = null;
try {
  lines = Files.readLines(file, Charsets.UTF_8);
} catch (IOException e) {
  e.printStackTrace();
}

整個世界清靜了!

未完待續(xù)···

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70350.html

相關(guān)文章

  • 有用Guava(二)

    摘要:最基本的區(qū)別是會一直保存所有添加的元素,直到顯式地移除。相對地,為了限制內(nèi)存占用,通常都設(shè)定為自動回收元素。消息接收方消息發(fā)起方同步異步注冊事件觸發(fā)事件處理這個錯誤可能是由于中對應(yīng)方法拋出了異常。 緩存 Guava Cache提供了內(nèi)存緩存功能。內(nèi)存緩存需要考慮很多問題,包括并發(fā)問題,緩存失效機(jī)制,內(nèi)存不夠用時緩存釋放,緩存的命中率,緩存的移除等等。 當(dāng)然這些東西Guava都考慮到了。...

    Tonny 評論0 收藏0
  • 集中式內(nèi)存緩存 Guava Cache

    摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區(qū)別其實就在于集中與非集中的概念,其對象可能是服務(wù)器內(nèi)存條硬盤等。內(nèi)存條版本緩存集中在一臺服務(wù)器的一條內(nèi)存條上,為集中式緩存。 背景 緩存的主要作用是暫時在內(nèi)存中保存業(yè)務(wù)系統(tǒng)的數(shù)據(jù)處理結(jié)果,并且等待下次訪問使用。在日長開發(fā)有很多場合,有一些數(shù)據(jù)量不是很大,不會經(jīng)常改動,并且訪問非常頻繁。但是由于受限于硬盤IO的性能或者遠(yuǎn)程...

    Dean 評論0 收藏0
  • 集中式內(nèi)存緩存 Guava Cache

    摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區(qū)別其實就在于集中與非集中的概念,其對象可能是服務(wù)器內(nèi)存條硬盤等。內(nèi)存條版本緩存集中在一臺服務(wù)器的一條內(nèi)存條上,為集中式緩存。 背景 緩存的主要作用是暫時在內(nèi)存中保存業(yè)務(wù)系統(tǒng)的數(shù)據(jù)處理結(jié)果,并且等待下次訪問使用。在日長開發(fā)有很多場合,有一些數(shù)據(jù)量不是很大,不會經(jīng)常改動,并且訪問非常頻繁。但是由于受限于硬盤IO的性能或者遠(yuǎn)程...

    KitorinZero 評論0 收藏0
  • Guava 源碼分析(Cache 原理【二階段】)

    摘要:前言在上文源碼分析原理中分析了的相關(guān)原理。我在北京模擬執(zhí)行你在哪兒回復(fù)最后執(zhí)行結(jié)果開始提問提問完畢,我去干其他事了收到消息你在哪兒等待響應(yīng)中。。。。?;貜?fù)我在北京這樣一個模擬的異步事件回調(diào)就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...

    msup 評論0 收藏0
  • Guava 源碼分析(Cache 原理【二階段】)

    摘要:前言在上文源碼分析原理中分析了的相關(guān)原理。我在北京模擬執(zhí)行你在哪兒回復(fù)最后執(zhí)行結(jié)果開始提問提問完畢,我去干其他事了收到消息你在哪兒等待響應(yīng)中。。。。。回復(fù)我在北京這樣一個模擬的異步事件回調(diào)就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...

    dack 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<