1. 程式人生 > >Apache-commons-lang3方法應用

Apache-commons-lang3方法應用

一.Apache的Jakarta commons工程下具有一系列公共基礎類。例如Lang,IO,Pool,BeanUtils等等。

  Commons基礎類包基本上是基於JDK API開發而來,依賴微小,可重用性是Jakarta commons的靈魂所在。

  Lang元件主要是一些工具類,涉及到陣列工具類,字串工具類,字元工具類,數學方面,時間日期工具類,異常,事件等工具類。

  閱讀Apache-Commons-Lang包下常用的陣列,字串,字元工具類的實現,能在實際開發中避免過多的寫相關字串處理,陣列處理的通用方法。很多時候,已經重複做了好多本不需要做的工作,在一個專案中字串,陣列的處理是相當頻繁的。

  得益於親身體會,擷取字串,替換字串,字串字元排序,查詢各式各樣的操作,每次到要針對一個問題去處理,反反覆覆編寫著相似的程式碼,一直有些反感,這一點我們並沒有採用拿來主義,我也看到好多專案中有一些成為utils或者tools的子包,裡面放置這一些字串處理,資料格式轉換等工具類,事實上,這些工作已經有人做了,而且做很很好的封裝,組織。

  Lang元件中的工具類的方法是靜態方法,直接使用,命名清晰明瞭,能夠很好的解決問題。有時候,拿來主義是必須了,Lang包下的工具類實現並非有什麼高超的編碼技巧,實現方式,其有效的組織和歸納一些列工具型別的方法,具備高可重用性是其價值的體現。

  通過閱讀Commons-Lang下的幾個常用,頻繁涉及的工具類,總結一點就是工具類的組織,歸納,公共特性是其核心價值。

 下面是四篇關於Commons-Lang下幾個工具類的說明:

   CharUtils CharSequenceUtils:

   ObjectUtils Range:

   ArrayUtils :

   StringUtils, RandomStringUtils:

   一次嘗試閱讀開源元件的原始碼,感受其組織程式碼,歸納特性,實現方法的原理,能夠巨集觀的看公共類設計的方法,方式。另外,熟悉開源元件程式碼,能夠將其投入到實際的工作,從而提高的生產效率,減輕編碼負擔。這將是軟體可重新為我帶來的一個切身可以享受到的好處。

 

------------------------------------------------------------------------------------------------------------------------------

二.Apache-commons-lang3包中提供了一系列static的方法Utils類。

ArrayUtils類使的陣列操作更像String,或者Map的操作一樣。

 1.ArrayUtils類的基本方法

EMPTY_OBJECT_ARRAY  : Object[] 長度為0的陣列,每一種基本型別都有此物件
toString(Object) 指定物件轉化為預設格式的字串
toString(Object, String) 指定物件轉化為指定風格的字串
isEquals(Object, Object) 判讀兩個物件是否相相等
toMap(Object[]) 陣列物件轉化為Map物件
toArray(T...) 動態引數轉化為陣列
clone(T[]) toPrimitive(Integer[])
nullToEmpty(Object[]) toPrimitive(Integer[], int)
subarray(T[], int, int) toObject(int[])
isSameLength(Object[],  Object[]) isEmpty(Object[])
getLength(Object) isNotEmpty(T[])
isSameType(Object, Object) addAll(T[], T...)
reverse(Object[]) add(T[], T)
indexOf(Object[], Object) add(T[], int, T)
indexOf(Object[], Object, int) remove(T[], int)
lastIndexOf(Object[], Object) removeElement(T[], Object)
lastIndexOf(Object[], Object,  int) removeAll(T[], int...)
contains(Object[], Object) removeElements(T[], T...)

上面例如:subarray,clone,nullToEmpty, indexOf, lastIndexOf更加類似字串的操作,addAll,add,remove,removeAll,removeElement等像操作Map.

這些方法有大量的過載用來實現不同型別的陣列。例如int[]陣列過載reverse(int []).

2.ArrayUtils.toMap(Object[] array)方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public static Map<Object, Object> toMap(Object[] array) { if (array == null) { return null; } final Map<Object, Object> map = new HashMap<Object, Object>((int) (array.length *1.5)); for (int i = 0; i < array.length; i++) { Object object = array[i]; if (object instanceof Map.Entry<?, ?>) { Map.Entry<?,?> entry = (Map.Entry<?,?>) object; map.put(entry.getKey(), entry.getValue()); else if (object instanceof Object[]) { Object[] entry = (Object[]) object; if (entry.length < 2) { throw new IllegalArgumentException(