免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Guava 教程1

這個(gè)夏天的早些時(shí)候,我已經(jīng)極力向我的所有同事推薦了 Google Collections 。 Kevin Bourrillion說(shuō)他的一個(gè)同事告訴他“沒(méi)有使用Google Collections前編程就像把一只手綁在背后”。

我灰常同意Kevin的這個(gè)同事!

可能文章的標(biāo)題有點(diǎn)奇怪。我指的是“編寫(xiě)漂亮代碼”。我猜我應(yīng)該說(shuō)“簡(jiǎn)潔的”Java代碼,但是,它們意思可不一樣(譯者注:漂亮的代碼看著很爽,簡(jiǎn)潔的不一定爽)。

在我準(zhǔn)備開(kāi)始賣(mài)力的吆喝這個(gè)我最最喜歡的Java類庫(kù)前,我有幾個(gè)額問(wèn)題要問(wèn)問(wèn)你:

多少次你寫(xiě)了像下面一樣的代碼:

1Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long,List<String>>>();

或者像這樣的不堪入目的代碼:

1int a = 5;
2int b = 10;
3int compareTo = Integer.valueOf(a).compareTo(Integer.valueOf(b));

或者有很多的if和else :-(

se77en
翻譯于 11個(gè)月前

3人頂

 翻譯的不錯(cuò)哦!

又有多少次你寫(xiě)了像下面這樣的代碼,只為了從一個(gè)文件中讀一點(diǎn)點(diǎn)東西?:

01File file = new File(getClass().getResource("/test.txt").getFile());
02BufferedReader reader;
03String text = "";
04try {
05reader = new BufferedReader(new FileReader(file));
06String line = null;
07while (true) {
08line = reader.readLine();
09if (line == null) {
10break;
11}
12text += line.trim() + "\n";
13}
14reader.close();
15reader = null;
16} catch (FileNotFoundException e1) {
17e1.printStackTrace();
18} catch (IOException e) {
19e.printStackTrace();
20}

好吧,我想說(shuō)… 這是什么TM玩意?我們已經(jīng)有Apache Commons Collections很多年了。那為什么我們還需要另外一個(gè)collections庫(kù)呢?我看過(guò)很多像這樣的評(píng)論:

“任何有一段時(shí)間開(kāi)發(fā)經(jīng)驗(yàn)的Java程序員都會(huì)積累這些類型的實(shí)用的工具類”

好吧,是的,這對(duì)于大多數(shù)開(kāi)發(fā)者來(lái)說(shuō)可能是(應(yīng)該是)對(duì)的。但是,有太多理由來(lái)擺脫垃圾代碼和重用漂亮的工具類!在這個(gè)博客里,我將要告訴你一些的確引起我求知欲-讓我沉溺于其中的事情,那就是Google Collections。

se77en
翻譯于 11個(gè)月前

1人頂

 翻譯的不錯(cuò)哦!

正如Jared Levy 曾說(shuō)過(guò)的:

這個(gè)庫(kù)簡(jiǎn)化了你的代碼,使它易寫(xiě)、易讀、易于維護(hù)。它能提高你的工作效率,讓你從大量重復(fù)的底層代碼中脫身。

此外,我會(huì)給你們展示一下Guava里面包含的很多非??岬墓δ?,讓你們看看如何用它來(lái)寫(xiě)出更漂亮的代碼,一旦看到這些,你們就會(huì)和以前那種僵化的令人討厭的寫(xiě)代碼方式說(shuō)拜拜了。

可觀
翻譯于 11個(gè)月前

1人頂

 翻譯的不錯(cuò)哦!

Google Guava 是 Google 為 Java 1.6 編寫(xiě)的核心庫(kù)。它仍然不是一個(gè)很成熟的庫(kù),在未來(lái)幾個(gè)月還將不斷的變化。Google Collections 將在 1.0 版本發(fā)布時(shí)將成為 Guava 的一部分。Guava (和 Google Collections) 已經(jīng)率先被很多 Google 開(kāi)發(fā)者使用。支持該項(xiàng)目的開(kāi)發(fā)者有 Kevin Bourrillion, Jared Levy, Crazy Bob Lee, Josh Bloch(!) (Google 的 Java 首席架構(gòu)師) 和 limpbizkit (我們找不到這家伙的真實(shí)姓名). Google Collections 在 2007 年就已經(jīng)有了,但 Guava 是在 2009年9月推出的。

作為這個(gè)系列的博客,我將向你介紹 Google Collections 并告訴你使用 Guava 和 Google Collections 能為你帶來(lái)什么好處。包括代碼量的減少以及新的更快的數(shù)據(jù)結(jié)構(gòu)。在第二部分我們將深入探討 Guava 和 Collections 的一些高級(jí)特性。

紅薯
翻譯于 11個(gè)月前

1人頂

 翻譯的不錯(cuò)哦!

Google Collections一覽

顯然一篇博文不能深入地覆蓋Google Collections的方方面面,所以我決定把時(shí)間放在我日常編碼中使用到的基礎(chǔ)且不失強(qiáng)大的特性上,首先,不要這么做:

1Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long,List<String>>>();
要這么做:
1Map<String, Map<Long, List<String>>> map = Maps.newHashMap();
或者更甚者直接使用靜態(tài)導(dǎo)入:
1Map<String, Map<Long, List<String>>>map = newHashMap();
很棒,不是嗎?多虧有泛型和寫(xiě)Collections的哥們提供給我們的這些方便工廠方法,我們不再需要寫(xiě)一些Java本身應(yīng)該自帶的東西。好吧,我知道這些會(huì)是JDK 7里的一部分,那當(dāng)然很好,不過(guò)Google Collections現(xiàn)在就有這些功能。

類似于com.google.common.collect.Maps提供的這些靜態(tài)工具方法,Lists和Sets也有:

1Lists.newArrayList();
2Sets.newHashSet();
還有更多! 自己去看看吧!


JoeyBlue
翻譯于 11個(gè)月前

1人頂

 翻譯的不錯(cuò)哦!

操作lists和maps

當(dāng)你在寫(xiě)單元測(cè)試時(shí),經(jīng)常會(huì)構(gòu)造一些測(cè)試數(shù)據(jù),可能是list、map、set等,對(duì)于一些像我一樣草率的人來(lái)說(shuō),測(cè)試代碼中會(huì)經(jīng)??吹筋愃葡旅娴恼Z(yǔ)句:

1List<String> list = new ArrayList<String>();
2list.add("a");
3list.add("b");
4list.add("c");
5list.add("d");
其實(shí)我也知道,這幾行代碼看起來(lái)很爛,我只是想用一些測(cè)試數(shù)據(jù)構(gòu)造一個(gè)不可變的list而已,我希望能像下面這樣寫(xiě)一行代碼搞定這些。。如何辦到?好吧,這很簡(jiǎn)單!
1ImmutableList<String> of = ImmutableList.of("a", "b", "c", "d");
Map也一樣
1ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
我現(xiàn)在慢慢的越來(lái)越喜歡這種簡(jiǎn)單而又有效的寫(xiě)代碼的方式,我還想縮短一下上面的代碼,但是由于ImmutableList和ImmutableMap都有of方法,不能使用靜態(tài)導(dǎo)入。不過(guò)有一個(gè)變通的方法就是說(shuō)在我們自己的集合工具中包裝這些創(chuàng)建工廠方法,那么對(duì)于不可變的list和map我只需要簡(jiǎn)單的這么寫(xiě)就好:
1ImmutableMap<String,String> map2 = mapOf("key1", "value1", "key2", "value2")
或者
1ImmutableList<String> list2 = listOf("a", "b", "c", "d");
而且如果我想構(gòu)造填充一個(gè)ArrayList(或者一個(gè)HashMap),我可以這樣:
1ArrayList<String> list3 = arrayListOf("a", "b", "c", "d");

兩種方式都可以,選擇權(quán)在你手上,很明顯,這種較之前面的方式更靈活優(yōu)雅一些,你說(shuō)呢?

除去可以使用方便干凈的方式來(lái)創(chuàng)建并填充集合類,我們也提供了很多額外的工具方法,比如過(guò)濾,對(duì)set取交集和并集,排序等等一些更優(yōu)雅的方法,我將會(huì)在第二部分中講解它們。


JoeyBlue
翻譯于 11個(gè)月前

0人頂

 翻譯的不錯(cuò)哦!

靜態(tài)導(dǎo)入和Eclipse模板

在這之前,我想先告訴你我在寫(xiě)代碼時(shí),是如果借用Eclipse的Code模板功能更高效的使用集合類的。(我假設(shè)你了解在IDEA或者其他IDE中也存在類似的功能,你可以根據(jù)這部分?jǐn)⑹鲎龀鱿鄳?yīng)的擴(kuò)展或變通)

作為一個(gè)Eclipse的用戶,我非常喜歡快捷鍵(參照這篇介紹Eclipse快捷鍵的博文:MouseFeed and how you can easily learn Eclipse shortcuts

OK,Ctrl+space是你們的好朋友!他也是代碼自動(dòng)補(bǔ)全的快捷鍵。(譯者注:當(dāng)然。在中國(guó),由于這個(gè)快捷鍵和切換輸入法沖突,一般都設(shè)置為了“Alt+/”作為代碼補(bǔ)全的快捷鍵)

在Eclipse下你可以創(chuàng)建一個(gè)模板來(lái)綁定到一個(gè)自動(dòng)補(bǔ)全的快捷關(guān)鍵字上,這也是魔力所在!

相對(duì)于鍵入Maps.newHashMap()來(lái)創(chuàng)建一個(gè)HashMap,或者干脆使用靜態(tài)導(dǎo)入,就可以簡(jiǎn)單的鍵入newHashMap()來(lái)創(chuàng)建一個(gè)HashMap,我只是簡(jiǎn)單的敲入newH,按下ctrl+space,見(jiàn)證奇跡的時(shí)刻到了!

在Eclipse菜單欄選擇Window -> Preferences,進(jìn)入Java -> Editor -> Templates,點(diǎn)擊“New”.  

Name處就是你想敲入的快捷關(guān)鍵字,我通常命名為我的方法名,比如在這里,就是“newHashMap”.

加上你喜歡的描述,比如”Import static Maps.newHashMap“,并增加下面的內(nèi)容:

1${:importStatic(com.google.common.collect.Maps.newHashMap)}newHashMap();${cursor}
以上就是創(chuàng)建快捷補(bǔ)全的全部步驟了,現(xiàn)在去為你常用到的所有方法添加模板吧!
JoeyBlue
翻譯于 11個(gè)月前

1人頂

 翻譯的不錯(cuò)哦!

Guava走馬觀花

最后,但并非不重要,我將向你展示一下如果使用Guava來(lái)處理本文開(kāi)頭留下來(lái)的兩個(gè)問(wèn)題:

1.從文件中按行讀取內(nèi)容

1File file = new File(getClass().getResource("/test.txt").getFile());
2List<String> lines = null;
3try {
4lines = Files.readLines(file, Charsets.UTF_8);
5} catch (IOException e) {
6e.printStackTrace();
7}
2.比較兩個(gè)基本類型
1int compare = Ints.compare(a, b);
3.把一個(gè)List<Integer>轉(zhuǎn)換為int數(shù)組
1List<Integer> list = listOf(1, 2, 3, 4);
2int[] array2 = Ints.toArray(list);
Guava為我們提供了對(duì)Core Java類庫(kù)全面的擴(kuò)展,我們可以使用com.google.common.primitices包下的Ints,Doubles,F(xiàn)loats,Shorts,Bytes以及Bools等工具類操作基本類型的數(shù)據(jù);com.google.common.io包提供了操作streams,buffers以及files等等,而且并發(fā)包中提供了一些像Futures,Callables以及Executors等方便的工具類來(lái)減輕我們寫(xiě)并發(fā)代碼的痛苦。除此之外,Guava提供了對(duì)Collections的增強(qiáng),以及非常優(yōu)雅的CharMatcher、Joiner以及Splitter類,這些類我將在下篇博文中提到。
JoeyBlue
翻譯于 11個(gè)月前

0人頂

 翻譯的不錯(cuò)哦!

可以從這里獲得源碼:
svn checkout http://guava-libraries.googlecode.com/svn/trunk/guava-libraries-read-only

下次我們會(huì)深入Guava 的高級(jí)功能,探索一下集合的用法,看看怎樣通過(guò)Multimap使java的功能更加強(qiáng)大,如何用mapping功能來(lái)轉(zhuǎn)換集合。請(qǐng)拭目以待。如果你們也用過(guò)Guava或者Google Collections請(qǐng)分享一下你們的心得。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Google Guava Collections 使用介紹
Java -- common基礎(chǔ)類庫(kù)Google Guava和Guice
6種快速統(tǒng)計(jì)代碼執(zhí)行時(shí)間的方法,真香!
分布式之緩存擊穿
J2SE5.0 實(shí)例---泛型_IT中國(guó) ITcnw.Com
JDK1.5新特性
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服