【注意!此為懶人解題法,請小心服用~ (  ̄ c ̄)y·ξ 】
懶人解題
前幾天在幫朋友寫一個小程式,情境是這樣:
- 他們家有一個製作翻譯檔的軟體,(就是一堆表格,在後面填入machine的各國翻譯),填完表格後匯出的翻譯檔格式XML
- 資料來源是一個Excel 檔,裡面有記錄所有要翻譯的資料,以及要翻譯成的版本
- 任務就是把Excel 的資料轉到XML裡面
A#123 翻譯1 翻譯2
A#423 翻譯1 翻譯2
B#3sj 翻譯1 翻譯2
#代表分隔符號,A 代表某Row 屬性, 123 代表某 Column 屬性,所以要做的工作就是把Excle讀出來,也轉換成Table的方式儲存,然後再把資料填入XML裡面。
問題
對於懶人思考模式來說,會遇到以下問題:
- 我利用JAXB 得marshaller 和 unmarshaller 來處理xml,把xml 轉換成物件操作,但是這種xml物件必須用展開/掃描的方式才能找到每一個iteam,所以在使用上不好操作。
但是HashMap 是Key value 型態,如果轉成Table 型態就會變成很噁心的樣子:
HashMap<String,Map<String,String>> = new HashMap<String,Map<String,String>>();
一來不好操作,二來,如果Row 或是Column裡面有更多巢狀結構會更噁心,甚至會一層一層包下去。
懶人解法
這時候我們就請出 Google Guava 的 HashBasedTable ,使用方法非常簡單與直觀,你就想像成在操作一個Table一樣,而他底層的儲存方式其實就是Map<R,Map<C,V>>,只是他幫你處理掉許多麻煩的問題,比如說在傳統的作法,你要儲存某個資料進去前,你比需要先檢查這個Key值對應的Value 存不存在 (在這邊是要檢查Colum Map是否存在),如果不存在要去產生一個放進去。現在有了HashBasedTable,就可以很輕鬆無腦的使用:
table.put(Rkey,CKey,Value)
然後要取出值也很只要寫
table.get(Rkey,CKey,Value)
打好收工~謝謝觀看懶人獻曝~(  ̄ c ̄)y·ξ
沒有留言:
張貼留言