第一章基本
对象操作
1.4自动生成 toString
ReflectionToStringBuilder.toString(this) 自动输出各属性的value
ToStringStyle:指定toStrig的格式
1.6构建hashCode
HashcodeBuilder:使用两素数作为起始,使用append增加hash的属性,如果属性值相同,则hash值相同
1.7 实现compareTo
RelectionCompareTo: 比较bean中属性的not-traisient和not-static属性,使用append和toComparison()按指定order和值比较,order和append的顺序相反
Array操作
1打印Array(primitive 和object)
ArrayUtils.toString
collection 直接用println输出即可
2 复制array
ArrayUtils.clone(arr):arr不变(safe-way处理null)
3. 翻转array
ArrayUtils.reverse(arr):直接修改arr; Collections.reverse
4 查找对象
ArrayUtils.containindexOf lastIndexOf 查找使用equals进行比较
5. 多维数组中创建map
ArrayUtils.toMap(Objectobj): 将二维数组转换为map
日期处理
1.格式化Date
DateUtils.FastDateFormat 是线程安全的,在多线程中使用。sun的所有format都是非线程安全的
2.round the date
DateUtils.rount() 在秒、分、日、月级别round时钟
3.truncate date object
将不重要的字段清零,如 DateUtils.truncate(now,Calendar.HOUR)
4.使用stopwatch测量时间
函数参数
使用validate验证函数参数,可验证(empty null 集合 无null isTrue):对(逻辑表达式、集合和对象、Map、String)
当验证失败时,跑出IllegalArgumentException异常,但异常不需要强制捕捉,如果不捕捉,不会有任何显示。
当与各种Range,如IntRange,判断某值是否在序列中,使用isTrue
在函数内进行参数校验,而不是让调用者处理
第二章操作text
字符串
1.测试空字符串:
isBlank,在程序中避免使用null,使用“”替代
2.简写String
abbreviate() 字符串简写到20字节
当进行查找时,如indexOf() 可使用abbreviate(message,offset,width)显示查找字符串附近的上下文
3.split a String
jdk中的split是使用正则表达式,如果不想用正则,在StringUtils.split(str,“ .”) 使用空格和.分割字符串
4.查找String
containXXX(),具体有anynone only whitespace
substringBetween() 可用来从html标签中解析出content,还可解析被相同字符串分割的text
5.strip和trimString
trim:从String两端去除空格和tab,还有trimToEmpty和trimToNull
strip:去除指定字符,如–SHA--,去除--
6.chomping a String
从String中去除\n\r 字符、自定义字符(最后一个)和最后几个字符
7,增加强调的头
StringUtils.repeat()center(在字符串首位增加内容)join的综合使用
8.按单词反转String
reverseDelimited(): 将String先分割为word,再对word间逆序并组合输出
9.wrap word
将String自动换行为指定的宽度 WordUtils.wrap
当对web上的textwrap时,指定lineseparators是 <br/>
可实现网页上的防拷贝功能,即插入无用字符
10.String内容判断
isNumericisAlpha isAlphaNumericisAlphaSpace 在form的name验证中,先用StringUtils.replacechars(使用字符集查找替换)替换不合适的字符,再用isAlpha判断
11.字符出现的频率
countMatches
12.按行读取数据 LineNumberReader
13.extract字符串
substringbefore after 和between等
14.比较两个字符串的区别
indexOfDifference 获得从开始出现不同的位置, difference输出第二个不同于第一个的部分, getLevenshteinDistance() 说明相似程度
第三章操作javabean
访问属性
使用getProperties 取得simpleindex map nest属性
使用getPropertyType 得到property的类型,PropertyDescriptor提供类型、write和read方法。
使用bean属性比较和排序
BeanComparator获得两个bean的同一属性,可以为mapindexed nested simple
clone bean
BeanUtils.cloneBean() 对于object类型属性也可以复制
使用predicate对bean进行验证
可使用BeanPredicate对属性进行判断,可对多个beanPredicate进行逻辑运算
创建一个map,包括bean的所有属性
PropertyUtils.describe() 创建一个map包括bean的所有可读的选项
将一个bean当做map使用
使用BeanMapwrap bean,可以以map的方式修改和读取属性,和PropertyUtils比起来具有迭代功能;而describe产生的部分与bean是分离的,修改map不会改变bean的值
运行时创建bean
当使用bean代表datamodel,可创建一系列的DynaClass, 1)创建DynaProperty; 2)创建DynaClass 3)创建DynaBean
使用String设置和获取property
BeanUtils和PropertyUtils中有很多相似的函数,区别是BeanUtils可使用字符串get和set属性
主要用于对输入参数的解析,比如request中国参数对bean的自动赋值
第四章 Functors
1.常见的有:
Comparator Iterator Predicate Transformer Factory(创建对象) and Closure
Comparator
2.comparator取非
ReverseComparator来翻转Comparator的结果
3.chain Comparator
场景:使用多于一个property对collection排序
ComparatorChain创建一个Comparator的序列,ComparatorChain使用每一个Comparator比较两个object,直到一个比较器结果不等
当在组合排序中,使用ComparatorChain+ReverserComparator可实现强大的排序功能,如类似于sql的 orderby name ASC, age DESC
当对bean排序时,使用由BeanComparator构成的ComparatorChain进行排序
4.比较null
场景:对包含Null的数组排序,将Null放在最前和最后端
将Comparator使用NullComparator封装,如果Comparator不能处理Null,则使用NullComparator避免抛出NullPointerException
5.FixOrder Comparator
场景:如果需要按枚举的值进行排序,比如按金、银、铜对运动员排序
构造String数组——》构造FixedOrderComparator——》构造BeanComparator——》进行bean的排序
Predicate
可用来filter select validate集合的内容,例如Equal InstanceOf Identity(使用==比较) 空 非空 True|False Unique(当object是第一次evaluated,则返回true)
1.自定义Predicate
继承自接口Predicate,实现evaluate函数
2.创建复杂的predicate
AndPredicate OrPredicate AllPredicate OnePredicate(精确地,有且只有一个) Any Non Not
Transformer
将srcobject变换为targetobject,src不变
1.将transformer组合成链
使用ChainedTransformer
2.conditional transformer
使用switchTransformer:根据predicate的结果进行transformer
Transformer.switchTransformer对于不满足Predicated不转换会返回Null,该函数适合if() else,而不适合if,如果实现if,应该先使用CollectionUtils.select再collect完成
3.不变
NopTransformer不进行任何转换返回源对象
closure
在对象上执行某项操作,有if(根据predicate执行不同的closure);while(满足predicate时,一直执行closure),for(执行指定次数的closure),switch(根据predicate执行closure)
1.chaining closure
2.condition
3.loop
whileclosure
第五章 collections
Iterator
1.使用loopiterator
对集合进行重复迭代,如List有AB C,如果迭代5次,得到AB C A B。不能使用hasNext作为终止条件,可使用reset重置
用于:列表要重复访问 命令序列要重复执行 队列或buffer需要循环monitor
2.ArrayListIterator
支持对ArrayList进行部分迭代,有用函数 nextIndex next set(设置当前元素的值)
Iteratorit=new ArrayListIterator(list, 3,6);
ArrayIterator和ObjectArrayIterator在数组上进行迭代
3.使用predicate对集合进行过滤
1)使用FilterIterator对predicate为true的元素迭代
2)删除collection中不满足条件的元素 CollectionUtils.filter
3)不修改原collection,返回过滤结果 CollectionUtils.select CollectionUtils.selectRejected
4.只迭代不同的元素
UniqueFilterIterator装饰Iterator,然后调用unique的next()实现只有未出现的对象会访问,相当于使用UniquePredicate的FilterIterator
Bag
可存放同一对象多次,并跟踪有多少个相同对象,可用函数有:
add(一次增加多个相同对象)
remove(删除指定数目的特定对象)
getCount(特定对象的个数)
取得unique的set,并在其上迭代
containAll(足够数量的该对象)
removeAll(指定数量的该对象)
以上一些函数和Collection中的同名函数不同,在使用这些函数时,不要将Bag转换为Collection
Map
1.一个key多个value的map
MultiMap
2.value到key key到value的双向映射
BidiMap(value和key都是唯一的)BidiMap.inverseBidiMap()
BidiMap有三个实现,DualHashBidiMap比较简单,使用两个HashMap存放key和value;DualHashMap适用于不保存插入顺序;DualTreeBidiMap使用TreeMap保存顺序;TreeBidiMap保存节点时使用红-黑树,每个节点使用key-value标识,和DualTreeBIdiMap相比,当调用put花费两倍时间,1/2的内存,表格如下:
DualHashBidiMap |
hashMap底层 |
时间少,空间多 |
DualHashMap |
hashMap底层 |
时间多,空间少 |
DualTreeBidiMap |
TreeMap底层 |
时间少,空间多 |
DualTreeMap |
TreeMap底层 |
时间多,空间少 |
3.大小写不区分
CaseInsensitiveMap 使用String的key
适用于:用户输入的提示,或无视大小写返回结果
4.确保map中所有value满足条件
使用PredicateMap验证key或value,当一个entry输入时,不满足条件,会抛出IllegalArgumentException
PredicateMap.decorate(newHashMap(), oneP,twoP)
5.实现LRU的cache
LRUMap:保存固定容量的entry,当插入新的entry时覆盖原来的,
用于:向用户显示数据,如排行榜的实现
如果使用很多cache,可考虑专门的缓存实现
6.lazyMap
实现懒加载,如操作数据库,通过primarykey获取对象时,在内部通过tranformer获取真正的records
7.MapUtils
将map的Double——》double Integer——》int
List
1. 使用PredicateList
效果同PredicateMap
2.转换
CollectionUtils.transform()
3.统计
CollectionUtils.countMatch :统计Colection中满足某一条件对象的个数
CollectionUtils.getCardiralityMap 返回collection中对象频率的map
4.集合操作
CollectionUtils.union intersection disjunction( aUb-a^b) subtract
第八章 Math
1.使用分数 Traction类
2.Array的最大最小值
3.Number Range的使用
使用Range接口,及其实现NumberRange DoubleRange FLoatRange IntRange 。有用函数是contain getMin getMax
4.产生水机变量
6.进行样本统计
7.进行线性代数运算
8.复数的数学运算
9.建立线性函数
10.估计程序运行时间
原理:使用SimpleRegression,添加数据点后,SimpleRegression会根据数据点的值,求出y=a*x+b的线性函数,当进行数据库访问时,假设每个记录的处理时间大致相等,可使用SimpleRegression进行估算,并使用StopWatch提供SimpleRegression需要的数据点。
第十章I/O和网络
IO相关
1.Stream bytes[] Reader和Writer的复制
使用CopyUtils实现各种源到目的的复制,使用4KB缓存,注意源和目的的flush和close
使用IOUtils.toString() 复制从Reader(InputStream)——》String
2.关闭Stream Writer Reader
使用IOUtils.closeQuietly避免捕获异常
3.测量stream的字节数
使用CountingInputStream和CountingOutputStream对stream进行decorate,调用CountingXXXStreamwrite/read后,调用getCount可获得字节数
4.splite outputStream
将output发送到两个OutputStream
注意使用flush输出,并使用closeQuietly悄悄关闭
文件
1.可读方式显示文件大小
FileUtils.byteCountToDisplaySize()
2.复制文件String和URLs
FileUtils.copyFIle() 复制文件到另一个文件
FileUtils.copyFileToDirectory 复制文件到目录
FileUtils.writeStringToFile: 将String写入到文件中
FileUtils.copyURLToFile:将URL的内容复制到文件,可用来实现保存网址内容
3.递归删除目录
FileUtils.deleteDirectory cleanDirectory
4.获得文件夹大小
FileUtils.sizeOfDirectory
5.过滤Directory下的文件
定义在commons.io.filefilter包中的filter都实现了IOFilter接口,可对file和fileName进行过滤,具体有PrefixFileFilter SuffixFileFilter NameFileFiliter DirectoryFilter(只接收directory参数) AndFileFilter FileFilter NotFileFilter
第十一章Http和WebDev
HttpClient是一个Http协议的客户端,支持getpost put options head和delete。支持多种认证机制basic digest和NTLM.支持https和http,管理session状态、cookie信息
public class MyMap<K,V> { private Map<K,V> kMap = new HashMap<K,V>(); private Map<V,ConcurrentHashMap<K,String>> vMap = new HashMap<V,ConcurrentHashMap<K,String>>(); private final static String VV = "1"; public boolean put(K k,V v) { boolean result = false; if(null == k || null == v) return result; if(kMap.containsKey(k)) { vMap.get(kMap.get(k)).remove(k); //vMap.remove(kMap.get(k)); } kMap.put(k, v); if(vMap.containsKey(v)) { vMap.get(v).put(k,VV); } else { ConcurrentHashMap<K,String> set = new ConcurrentHashMap<K,String>(); set.put(k,VV); vMap.put(v, set); } return true; } public boolean containsKey(K k) { return kMap.containsKey(k); } public boolean containsValue(V v) { return vMap.containsKey(v); } public Set<K> keySet(){ return kMap.keySet(); } public Set<V> valueSet() { return vMap.keySet(); } public V getByKey(K k) { return kMap.get(k); } public ConcurrentHashMap<K,String> getByValue(V v) { return vMap.get(v); } public String toString() { return kMap.toString(); } public static void main(String[] args) { MyMap<String,String> map = new MyMap<String,String>(); map.put("k1", "v1"); map.put("k2", "v2"); map.put("k3", "v1"); map.put("k4", "v2"); System.out.println("k1 -> " + map.getByKey("k1")); System.out.println("v1 -> " + map.getByValue("v1").keySet()); System.out.println("v2 -> " + map.getByValue("v2").keySet()); map.put("k5", "v2"); System.out.println("v2 -> " + map.getByValue("v2").keySet()); map.put("k5", "v1"); System.out.println("v1 -> " + map.getByValue("v1").keySet()); System.out.println("v2 -> " + map.getByValue("v2").keySet()); //替换所有的v1为v111 System.out.println("before update : " + map); for(String k : map.getByValue("v1").keySet()) { map.put(k, "v111"); } System.out.println("after update : " + map); } }
http://blog.csdn.net/dananhai381/article/details/38866667
相关推荐
Apache Common Math 2.2 API CHM 英文文档。 注意:如果你下载后打开右侧页面出现该页无法显示情况,请在CHM件中右键-属性,在下面点击-解除锁定。之后再打开文档即可。
国内的图书更是没有这方面的,在Amozon搜索了下,找到了《Writing Apache Modules with Perl and C》和《The Apache Modules Book: Application Development with Apache》两本书,由于前一本牵涉到Perl,对Perl没有...
下面通过一个简单的样例来说明如何利用apache common pool来应用对象池。 假定我现在有一个任务,就是对一堆字符串进行格式化,为了加快速度,采用了多线程的方式允许,而格式化则是通过对象StringFormat来实现。 ...
Apache Common API 是一系列由Apache软件基金会开发的Java库,这些库提供了各种实用工具和功能,以简化编程任务。本资源包含五个子项目的主要API文档,它们分别是BeanUtils、Collections、Configuration、Lang和...
apache commonmail.jar 用来发邮件
apache common_vsf.chm中文帮助文档
apache common imaging,Apache的图形处理库
Apache Common CLI 1.2 是一个Java库,主要用于处理命令行接口(CLI)的参数解析。这个库使得在Java程序中处理用户输入的命令行参数变得简单和规范,避免了手动解析字符串的繁琐工作。Apache Common CLI 提供了一种...
用于压缩/解压缩的java开发工具包,基本上主流格式全包含,其中apache-common-compress内有5个jar包,两个是test的不用管,剩余三个,一个是源码包,一个是开发包另一个是javadoc。解压除RAR外的所有格式。 apache-...
apache的学习笔记
apache_common_validator.chm 中文帮助文档 apache下的validator中文帮助文档
这篇笔记主要围绕Apache FTPServer的使用、配置和相关开发进行讲解。 首先,Apache FTPServer提供了灵活的配置机制,允许管理员通过XML文件定制服务器的行为。这包括设置用户账户、指定工作目录、限制上传下载速度...
Apache Kylin 环境搭建笔记 Apache Kylin 是一个基于分布式架构的企业级数据分析平台,由 Apache 软件基金会开发和维护。Kylin 环境搭建是一个复杂的过程,需要逐步配置和测试。本文将指导读者从头开始搭建 Apache ...
总结来说,"apache-common-uploadfile"是一个解决Java Servlet环境中文件上传问题的库,它提供了高效且灵活的解决方案,使得开发者能够方便地处理用户上传的各种文件。在Web开发中,掌握Apache Commons FileUpload的...
Apache Commons Pool2 是一个高效的对象池库,它允许开发者创建并管理对象池,以提高程序性能,特别是对于那些创建和销毁成本较高的对象。在Java应用中,对象池化是一种常用的优化策略,它通过复用已经创建的对象来...
"org.apache.common.zip"是Apache Commons项目的一部分,它是一个Java库,提供了对ZIP文件格式的广泛支持。Apache Commons是Apache软件基金会的一个项目,旨在提供可重用的Java组件,以简化开发人员的工作。这个库...
"apache-common最全的源码" 提供了该项目的完整源代码,这对于开发者来说是一份宝贵的资源,可以深入理解其实现机制,学习优秀的编程实践,以及进行二次开发或定制。 Apache Commons 包含了多个模块,每个模块都有...
Apache Commons 是一个由 Apache 软件基金会维护的开源项目集合,它提供了许多实用的 Java 类库,解决了在开发过程中常见的问题,提升了代码的可复用性和效率。这个压缩包包含了一些 Apache Commons 的核心模块,让...
包含commons-beanutils-1.9.3-bin commons-collections4-4.1-bin commons-dbcp-1.4-bin commons-lang-2.6-bin commons-lang3-3.6-bin commons-pool-1.6-bin commons-pool2-2.4.3-bin
`Apache common包的作用.docx` 文件很可能包含了对上述各个组件的详细介绍和使用案例。而 `API.rar` 文件则可能是Apache Commons 的API文档,解压后可以查看详细的类和方法说明,这对于理解和使用Apache Commons ...