Google Guava是把小巧又鋒利的瑞士軍刀,把你的代碼修剪得整潔又漂亮。
-------------尼古拉斯·沃茲基碩德java
咱們已經有Apache Commons Collections了,爲何還須要另一個collections庫呢?
由於好用唄!測試
平常編碼中常常會遇到下面的代碼:編碼
Map<String, Map<String, String>> map = new HashMap<String, Map<String,String>>();
通過Guava的修剪後能夠變成這樣:code
Map<String, Map<String, String>> map = Maps.newHashMap();
甚至這樣:對象
Table<String, String, String> tab = HashBaseTable.create(); //其實這種結構,就是一個二維映射,Guava把它包裝成了table。 //還沒完,變成這樣後,訪問起來比以前方便多了,直接拿兩個維度去拿結果。 String res = tab.get("1", "1");
固然Lists和Sets也有這樣的用法:
Lists.newArrayList();
Sets.newHashSet();get
有時候咱們須要一些測試數據構造一個不可變的List,通常都會這麼寫:io
List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d");
有了Guava能夠這樣:table
ImmutableList<String> of = ImmutableList.of("a", "b", "c", "d");
Map也同樣List
ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
有時候要用到雙向映射,好比說根據學號查詢名字和根據名字查詢學號,這時候通常都須要建兩個Map分別由學號映射到名字,由名字映射到學號。
但Guava的BiMap完美處理雙向映射。file
BiMap<Integer,String> idNameMap = HashBiMap.create(); idNameMap.put(1,"xiaohong"); idNameMap.put(2,"xiaoming"); idNameMap.put(3,"xiaolan"); System.out.println("idNameMap:"+idNameMap); BiMap<String,Integer> nameIdMap = idNameMap.inverse(); System.out.println("nameIdMap:"+nameIdMap);
固然,在使用BiMap時,會要求Value的惟一性。若是value重複了則會拋出錯誤:java.lang.IllegalArgumentException。
inverse()會返回一個反轉的BiMap,可是注意這個反轉的map不是新的map對象,只是與原始map的一種關聯,這樣你對於反轉後的map的全部操做都會影響原始的map對象。
爲了從文件中讀取內容通常操做以下:
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() + "\n"; } 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<String> lines = null; try { lines = Files.readLines(file, Charsets.UTF_8); } catch (IOException e) { e.printStackTrace(); }
整個世界清靜了!