有用的guava(一)

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

1. Google Collections

咱們已經有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對象。

2. 文件操做

爲了從文件中讀取內容通常操做以下:

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();
}

整個世界清靜了!

未完待續···

相關文章
相關標籤/搜索