http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/index.html
2.toString方法,ReflectionToStringBuilder.toString(obj)可以按默认格式打印对象的内容,也可以用toStringBuilder.append来设置打印的内容,并可以设置ToStringBuilder的ToStringStyle。
3.hashCode方法,可以用new HashCodeBuilder(17,37).append(firstName).append(lastName).toHashCode()方法来生成hashCode,如果要让对象的所有field都作用于hashCode,可以调用HashCodeBuilder.reflectionHashCode(obj).
4.isEquals方法,EqualsBuilder用法类似HashCodeBuilder,可以用append(支持所有原始类型及对象,也支持数组比较元素),也可以用reflectionEquals(this,obj)来比较对象的每个field。
5.compareTo方法,用于排序或比较对象,CompareToBuilder.reflectionCompare(this,obj)比较的是对象的field,不考虑static field和transient field,注意如果是append(first,obj.first).append(last,obj.last).toComparison()方法,则有一个比较顺序问题,是从最后一个append开始往前比较,只有当前比较的的结果相同时才会比较前一个append的值。当然,如果要比较bean可以用BeanComparator,更细致的比较可以chain Comparetor......
6.ArrayUtils实用方法简介,具体可参考:
1.toString方法打印数组内容
2.clone出完全新的数组
3.reverse反转数组元素,Java提供的Collections.reverse参数是list
4.clone方法,内部调用了java自带的clone方法,只是对null做了判断,如果是null则返回null
5.toObject/toPrimitive方法提供了装箱与拆箱方法,java1.5后用不上了
6.contains/indexOf/lastIndexOf用于判断某数是否在数组中以及查找其位置,对象比较内部使用的是object.equals方法
7.toMap方法,可以将一个二维数组转换为map,第二维的数组必须至少有两个元素,第一个为key,第二个为value
7.日期操作函数,用DataFormatUtils的多种格式创建线程安全的FastDateFormat来替换java原生的线程不安全的SimpleDateFormat.一般来说Sun提供的所有format类比如SimpleDateFormat,MessageFormat,NumberFormat,DecimalFOrmat,CoiceFormat等都是线程不安全的,DateUtils提供的一下实用方法:
1.灵活的set方法,方便设置年月日,时间等
2.round四舍五入及ceil去尾数法
3.turncate可以清除到指定时间幅度的值,比如将2014-1-8 23:06:03 做小时truncate会到2014-1-8 23:00:00
8.Validate类可以提供一些基本的为空,非null,数组范围,正则等,如果验不过则抛出exception,可以在方法中做断言用,可以配Range范围类来做一些边界等判断
9.StopWatch方法可以像秒表一样提供时间的准确计算,可以用在程序耗时方面,当然用System.nanoTime也可以来做,但是StopWatch提供的start,stop,split等方式更具可读性。
10.StringUtils处理字符串,主要方法如下:
-
abbreviate 缩写
- IsEmpty/IsBlank - checks if a String contains text
- Trim/Strip - removes leading and trailing whitespace,strip提供了丰富的截除部分字符串的功能
- Equals - compares two strings null-safe
- startsWith - check if a String starts with a prefix null-safe
- endsWith - check if a String ends with a suffix null-safe
- IndexOf/LastIndexOf/Contains - null-safe index-of checks
- IndexOfAny/LastIndexOfAny/IndexOfAnyBut/LastIndexOfAnyBut - index-of any of a set of Strings
- ContainsOnly/ContainsNone/ContainsAny - does String contains only/none/any of these characters
- Substring/Left/Right/Mid - null-safe substring extractions
- SubstringBefore/SubstringAfter/SubstringBetween - substring extraction relative to other strings
- Split/Join - splits a String into an array of substrings and vice versa
- repeat 克隆字符
- Remove/Delete - removes part of a String
- Replace/Overlay - Searches a String and replaces one String with another
- Chomp/Chop - removes the last part of a String
- LeftPad/RightPad/Center/Repeat - pads a String
- UpperCase/LowerCase/SwapCase/Capitalize/Uncapitalize - changes the case of a String
- CountMatches - counts the number of occurrences of one String in another
- IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable - checks the characters in a String
- DefaultString - protects against a null input String
- Reverse/ReverseDelimited - reverses a String
- Abbreviate - abbreviates a string using ellipsis
- Difference/indexOfDifference - compares Strings and reports on their differences
- LevenshteinDistance - the number of changes needed to change one String into another
11.WordUtils提供对字符串大小写转换,缩写等操作,方法capitalize/uncapitalize/swapCase/initials等
12 Lang All Classes :
AggregateTranslator ,AnnotationUtils ,ArrayUtils ,AtomicInitializer ,AtomicSafeInitializer ,BackgroundInitializer ,BasicThreadFactory ,BasicThreadFactory.Builder ,BitField ,BooleanUtils ,Builder ,CallableBackgroundInitializer ,CharEncoding ,CharSequenceTranslator ,CharSequenceUtils ,CharSet ,CharSetUtils ,CharUtils ,ClassUtils ,CloneFailedException ,CodePointTranslator ,CompareToBuilder ,CompositeFormat ,ConcurrentException ,ConcurrentInitializer ,ConcurrentRuntimeException ,ConcurrentUtils ,ConstantInitializer ,ConstructorUtils ,ContextedException ,ContextedRuntimeException ,DateFormatUtils ,DateUtils ,DefaultExceptionContext ,DurationFormatUtils ,EntityArrays ,EnumUtils ,EqualsBuilder ,EventListenerSupport ,EventUtils ,ExceptionContext ,ExceptionUtils ,ExtendedMessageFormat ,FastDateFormat ,FieldUtils ,FormatFactory ,FormattableUtils ,Fraction ,HashCodeBuilder ,IEEE754rUtils ,ImmutablePair ,JavaVersion ,LazyInitializer ,LocaleUtils ,LookupTranslator ,MethodUtils ,MultiBackgroundInitializer ,MultiBackgroundInitializer.MultiBackgroundInitializerResults ,Mutable ,MutableBoolean ,MutableByte ,MutableDouble ,MutableFloat ,MutableInt ,MutableLong ,MutableObject ,MutablePair ,MutableShort ,NumberUtils ,NumericEntityEscaper ,NumericEntityUnescaper ,NumericEntityUnescaper.OPTION ,ObjectUtils ,ObjectUtils.Null ,OctalUnescaper ,Pair ,RandomStringUtils ,Range ,ReflectionToStringBuilder ,SerializationException ,SerializationUtils ,StandardToStringStyle ,StopWatch ,StrBuilder ,StringEscapeUtils ,StringUtils ,StrLookup ,StrMatcher ,StrSubstitutor ,StrTokenizer ,SystemUtils ,TimedSemaphore ,ToStringBuilder ,ToStringStyle ,TypeUtils ,UnicodeEscaper ,UnicodeUnescaper ,Validate ,WordUtils
// Lang包的一些补充说明: 2014年3月13日
12.1.Fraction是一个分数的类,提供分子分母或分式型的字符串来生成一个Fraction对象,此类封装了加减乘除,约分,变号,指数等常见的数学操作
12.2.NumberUtil提供了一些字符串解析成各种数字型的方法,包括解析成Number类型,同时提供了参数是各种数组或多个参数里找出min/max的使用工具方法。Math包也提供了Min/Max类
12.3.Range类提供了抽象类型的范围类,根据默认或传入的comparator来确定范围和判断是否属于此范围
//----------------------------------------------------Commons Codes --------------------------------------------------
Commons Codes All Classes AbstractCaverphone,Base32,Base32InputStream,Base32OutputStream,Base64,Base64InputStream,Base64OutputStream,BaseNCodec,BaseNCodecInputStream,BaseNCodecOutputStream,BCodec,BeiderMorseEncoder,BinaryCodec,BinaryDecoder,BinaryEncoder,Caverphone,Caverphone1,Caverphone2,CharEncoding,Charsets,ColognePhonetic,Crypt,Decoder,DecoderException,DigestUtils,DoubleMetaphone,Encoder,EncoderException,Hex,Lang,Languages,Languages.LanguageSet,Languages.SomeLanguages,MatchRatingApproachEncoder,Md5Crypt,MessageDigestAlgorithms,Metaphone,NameType,Nysiis,PhoneticEngine,QCodec,QuotedPrintableCodec,RefinedSoundex,Rule,Rule.Phoneme,Rule.PhonemeExpr,Rule.PhonemeList,Rule.RPattern,RuleType,Sha2Crypt,Soundex,StringDecoder,StringEncoder,StringEncoderComparator,StringUtils,UnixCrypt,URLCodec
//----------------------------------------------------Commons BeanUtils--------------------------------------------------
14.beanutils是Struts等web开源框架的最基本思想实现库,主要用于操作类及属性,通过发射等手段提供方便对bean的基本工具方法:
15.PropertyUtils主要方法及使用:
- 中提供了获取bean中普通元素,bean元素,list元素,Map元素的值方法,分别是getSimpleProperty(bean,"name"),getNestedProperty(bean,"ext.balance"),getIndexedProperty(bean,"list[1]"),getMappedProperty(bean,"map(key)"),也可以直接调用getProperty(bean,"ext.list[0].map(key)")组合的形式,被解析的时候根据具体形式再调用上面的具体方法,相应的set方法使用,尤其是JEXL的描述用法很方便
- isReadable/isWritable(bean,"name")可以查看此属性是否可读/可写
- describe方法返回所有get方法可访问的bean元素到一个Map中,key为属性名。BeanMap类通过传入一个bean构造一个map,在此map上用map的基本方法直接操作bean,酷啊。
16.BeanComparator提供比较具体bean属性从而排序的方法,此类也支持传入具体的Comparator实现具体排序的算法
17.克隆bean可以用PropertyUtils.copyProperties(destBean,sourBean),也可以直接调用BeanUtils.cloneBean(sourBean)直接返回一个新的bean,但是需要注意,bean里面如果是对象元素,则对象元素是两个bean共同"引用"的,也就是在一个bean里修改了对象元素,另一个bean能看到。BeanUtils里有一些和PropertyUtils重复的方法,但是BeanUtils里的方法能灵活的convert,尤其是setProperty的时候,如BeanUtils.setProperty(bean,"age","50"),而bean中的age为int型,如果是用PropertyUtils.setProperty则会报类型错误
18.通过设置DynaProperty,DynaClass可用new出一个动态的bean用于灵活的代表一个data model。如可以通过一个xml文件的配置来创建一个dynabean
19.BeanPredicae可以利用collections提供的多种类型的Predicate来通过bean中的具体属性对bean的某些属性条件进行验证,所有Predicate的子类:
AbstractQuantifierPredicate, AllPredicate, AndPredicate, AnyPredicate, ComparatorPredicate, EqualPredicate, ExceptionPredicate, FalsePredicate,IdentityPredicate, InstanceofPredicate, NonePredicate, NotNullPredicate, NotPredicate, NullIsExceptionPredicate, NullIsFalsePredicate,NullIsTruePredicate, NullPredicate, OnePredicate, OrPredicate, TransformedPredicate, TransformerPredicate, TruePredicate, UniquePredicate //----------------------------------------------------Commons Collections--------------------------------------------------
20.ReverseComparator/ComparatorChain/NullComparator/FixedOrderComparator比较器,ComparatorChain可以add多个comparator,从最后一个add的comparator开始比较直到不为0,NullComparator通过构造的时候传入false/ture来比较null对象与其他对象相比时是-1/1, FixedOrderComparator则是通过预设的数组或list顺序来比较传入的对象,按此预设的值来决定顺序
21.PredicateUtil提供了创建多种Predicate对象的方法,用于对bean进行判断,TransForm用于根据传入的对象来create 新对象,而Closure则是对传入的对象进行修改,本质都相当于Decorator模式,根据传入的对象做一些处理
22.LoopIterator可以做循环iter,通过设置reset来重置,ArrayListIterator可以iter部分list,FilterIterator可以根据Predicate对象对集合遍历时做一些条件限制,符合条件的才iter,比如UniqueFilterIterator就是一个唯一性遍历的子实现
23.Bag可以用来控制对象使用的数量,HashBag/TreeBag
24.一些牛B的Map
- MultiKeyMap:多个key共同作用才能对应到一个value
- MultiValueMap:一个key可以对应多个value,get(key)时返回的是一个ArrayList实例
- BidiMap可以通过value来反找key,这个时候key-value都是一一对应的,put的时候如果key不同而value,则后put的key会替换相同value对应的已经存在的key。
CaseInsensitiveMap 对key大小写敏感的Map,即大小写不同但是内容相同的key会被认为是同一个key
25.Predicate*提供了对多种集合进行decorate的验证的类,用于控制集合的有效性,如PredicatedBag,PredicatedSortedBag,PredicatedCollection,PredicateDecorator,PredicateTransformer,PredicatedList,PredicatedMap,PredicatedSortedMap,PredicatedQueue,PredicatedSet,PredicatedSortedSet
示例:
List list = PredicatedList.decorate(new ArrayList(),new Predicate<String>() {
public boolean evaluate(String str) {
return str.startWith("cfca");
}
}); // PredicatedList继承了list,并重写了add方法,在add里加入了验证
26.可以利用CollecionUtils里的transform对Collection系列类里的元素进行一些转换,传入collection及former即可将collection 里的各元素转换,此CollecionUtils还有一个方法transformingCollection()用法类似,只不过是返回一个collection,在往此collection加入元素时才开始进行转换
CollecionUtils里一些常见静态工具方法:
- countMatches(collection,predicate)计算符合predicate的collection中的元素的个数
- cardinality(ele,collection)计算ele在collection出现的次数
- getCardinalityMap(collection)得到一个map,key为collection中的元素,value为每个元素出现的次数
- union,intersection,disjunction,subtract可以实现两个iterable对象的并集,交集,非交集,不包括集
27.LRUMap根据Least Recently Used算法来淘汰放入里面的元素,注意它是线程不安全的,需要用Collections.synchronized***来保障线程安全。
28.
LazyMap.lazyMap(map,factory) 可以将一个普通的map转化成lazymap,即当get的时候如果map里没有对应的key,则会调用factory里面一次生成value放到map中。
29.MapUtils里封装了很多转化成不同功能map 的方法:
fixedSizeMap(Map)
fixedSizeSortedMap(SortedMap)
lazyMap(Map,Factory)
lazyMap(Map,Transformer)
lazySortedMap(SortedMap,Factory)
lazySortedMap(SortedMap,Transformer)
predicatedMap(Map,Predicate,Predicate)
predicatedSortedMap(SortedMap,Predicate,Predicate)
transformedMap(Map, Transformer, Transformer)
transformedSortedMap(SortedMap, Transformer, Transformer)
multiValueMap( Map )
multiValueMap( Map, Class )
multiValueMap( Map, Factory )
get***Value可以将得到的object或泛型V转化成***对应的类型,比较方便
//----------------------------------------------------Commons Digester/Betwixt--------------------------------------------------
30.Digester可以将xml文件转成javabean,其原理是利用sax栈解析,根据定义好的rules(rules可以是文件也可以是Rules实例)
31.rules的作用就是告诉digester的parser当遇到xml中的某个节点时,应该按照什么方式去解析,是生成对象,还是设置属性之类的。
demo:
Digester digester = new Digester();
//设置对XML文档资料是否进行DTD验证
digester.setValidating( false );
//当遇见 catalog 元素的时候,产生一个Catalog对象
digester.addObjectCreate( "catalog", Catalog.class );
//当遇见 catalog 元素下面的book的时候,产生一个Book对象
digester.addObjectCreate( "catalog/book", Book.class );
// 当遇见 catalog 元素下面的book的author时候,调用author属性的Set方法
digester.addBeanPropertySetter( "catalog/book/author", "author" );
digester.addBeanPropertySetter( "catalog/book/title", "title" );
//当再一次遇见 catalog 元素下面的book的时候,调用catalog类的addBook()方法
digester.addSetNext( "catalog/book", "addBook" );
32.如果有多个namespace,则需要分别设置不同的namesapce后再设置不同的RuleSet,如:
33.所有的rule其实就是根据xpath的规则告诉digester按照不同的方式去处理当前处理到的这个节点,其优势相比较于sax在于匹配规则的灵活性及调用的方便性,如digester.addRule("*/email",new EmailRule());这样在EmailRule可以通过继承Rule类来自己重载begin(),body(),end(),finish()等方法来实现特殊操作,比如真发emial。(继承Rule的方式其实和sax解析实现ContentHandler接口思想是一致的)
34.digester也可以通过setSubstitutor方法来设置解析时提供的值来替换xml里类似${name}来实现类似“模板”解析,很方便
//----------------------------------------------------Commons CLI/Configuration--------------------------------------------------
36.cli包可以方便执行java应用时设置一些命令及参数,类似ls -l,rm -rf之类的,有多中命令方式: