设为首页 收藏本站
查看: 639|回复: 0

[经验分享] apache common book 笔记

[复制链接]

尚未签到

发表于 2015-11-14 08:42:56 | 显示全部楼层 |阅读模式
第一章基本
对象操作
1.4自动生成 toString
ReflectionToStringBuilder.toString(this) 自动输出各属性的value
ToStringStyle:指定toStrig的格式
1.6构建hashCode
HashcodeBuilder:使用两素数作为起始,使用append增加hash的属性,如果属性值相同,则hash值相同
1.7 实现compareTo
RelectionCompareTo: 比较bean中属性的not-traisientnot-static属性,使用appendtoComparison()按指定order和值比较,orderappend的顺序相反
Array操作
1打印Array(primitive object)
ArrayUtils.toString
collection 直接用println输出即可
2 复制array
ArrayUtils.clone(arr):arr不变(safe-way处理null
3. 翻转array
ArrayUtils.reverse(arr):直接修改arrCollections.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验证函数参数,可验证(emptynull 集合 无null  isTrue):对(逻辑表达式、集合和对象、MapString
    当验证失败时,跑出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(),具体有anynoneonly whitespace
substringBetween() 可用来从html标签中解析出content,还可解析被相同字符串分割的text
5.striptrimString
trim:从String两端去除空格和tab,还有trimToEmptytrimToNull
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 formname验证中,先用StringUtils.replacechars(使用字符集查找替换)替换不合适的字符,再用isAlpha判断
11.字符出现的频率
countMatches
12.按行读取数据 LineNumberReader
13.extract字符串
substringbefore after between
14.比较两个字符串的区别
indexOfDifference 获得从开始出现不同的位置, difference输出第二个不同于第一个的部分, getLevenshteinDistance() 说明相&#20284;程度
第三章操作javabean
访问属性
使用getProperties 取得simpleindexmap nest属性
使用getPropertyType 得到property的类型,PropertyDescriptor提供类型、writeread方法。
使用bean属性比较和排序
BeanComparator获得两个bean的同一属性,可以为mapindexednested simple
clone bean
  BeanUtils.cloneBean() 对于object类型属性也可以复制
使用predicatebean进行验证
  可使用BeanPredicate对属性进行判断,可对多个beanPredicate进行逻辑运算
创建一个map,包括bean的所有属性
  PropertyUtils.describe() 创建一个map包括bean的所有可读的选项
将一个bean当做map使用
  使用BeanMapwrap bean,可以以map的方式修改和读取属性,和PropertyUtils比起来具有迭代功能;而describe产生的部分与bean是分离的,修改map不会改变bean的&#20540;
运行时创建bean
  当使用bean代表datamodel,可创建一系列的DynaClass1)创建DynaProperty2)创建DynaClass 3)创建DynaBean
使用String设置和获取property
  BeanUtilsPropertyUtils中有很多相&#20284;的函数,区别是BeanUtils可使用字符串getset属性
  主要用于对输入参数的解析,比如request中国参数对bean的自动赋&#20540;
第四章 Functors
1.常见的有:
    Comparator   Iterator    Predicate   Transformer  Factory(创建对象) and  Closure
Comparator
2.comparator取非
    ReverseComparator来翻转Comparator的结果
3.chain Comparator
  场景:使用多于一个propertycollection排序
  ComparatorChain创建一个Comparator的序列,ComparatorChain使用每一个Comparator比较两个object,直到一个比较器结果不等
  当在组合排序中,使用ComparatorChain&#43;ReverserComparator可实现强大的排序功能,如类&#20284;于sqlorderby name ASC, age DESC
  当对bean排序时,使用由BeanComparator构成的ComparatorChain进行排序
  4.比较null
  场景:对包含Null的数组排序,将Null放在最前和最后端
  Comparator使用NullComparator封装,如果Comparator不能处理Null,则使用NullComparator避免抛出NullPointerException
5.FixOrder Comparator
  场景:如果需要按枚举的&#20540;进行排序,比如按金、银、铜对运动员排序
  构造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变换为targetobjectsrc不变
1.transformer组合成链
  使用ChainedTransformer
2.conditional transformer
  使用switchTransformer:根据predicate的结果进行transformer
  Transformer.switchTransformer对于不满足Predicated不转换会返回Null,该函数适合if()else,而不适合if,如果实现if,应该先使用CollectionUtils.selectcollect完成
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
  对集合进行重复迭代,如ListABC,如果迭代5次,得到ABC A B。不能使用hasNext作为终止条件,可使用reset重置
  用于:列表要重复访问  命令序列要重复执行   队列或buffer需要循环monitor
2.ArrayListIterator
  支持对ArrayList进行部分迭代,有用函数 nextIndex next    set(设置当前元素的&#20540;)
  Iteratorit=new ArrayListIterator(list, 3,6);
  ArrayIteratorObjectArrayIterator在数组上进行迭代
3.使用predicate对集合进行过滤
  1)使用FilterIteratorpredicatetrue的元素迭代
  2)删除collection中不满足条件的元素 CollectionUtils.filter
  3)不修改原collection,返回过滤结果  CollectionUtils.select   CollectionUtils.selectRejected
4.只迭代不同的元素
  UniqueFilterIterator装饰Iterator,然后调用uniquenext()实现只有未出现的对象会访问,相当于使用UniquePredicateFilterIterator
Bag
  可存放同一对象多次,并跟踪有多少个相同对象,可用函数有:
  add(一次增加多个相同对象)
  remove(删除指定数目的特定对象)
getCount(特定对象的个数)
取得uniqueset,并在其上迭代
containAll(足够数量的该对象)
removeAll(指定数量的该对象)
以上一些函数和Collection中的同名函数不同,在使用这些函数时,不要将Bag转换为Collection
Map
1.一个key多个valuemap
  MultiMap
2.valuekey keyvalue的双向映射
  BidiMapvaluekey都是唯一的)BidiMap.inverseBidiMap()
  BidiMap有三个实现,DualHashBidiMap比较简单,使用两个HashMap存放keyvalueDualHashMap适用于不保存插入顺序;DualTreeBidiMap使用TreeMap保存顺序;TreeBidiMap保存节点时使用红-黑树,每个节点使用key-value标识,和DualTreeBIdiMap相比,当调用put花费两倍时间,1/2的内存,表&#26684;如下:
DualHashBidiMap
hashMap底层
时间少,空间多
DualHashMap
hashMap底层
时间多,空间少
DualTreeBidiMap
TreeMap底层
时间少,空间多
DualTreeMap
TreeMap底层
时间多,空间少
3.大小写不区分
  CaseInsensitiveMap 使用Stringkey
  适用于:用户输入的提示,或无视大小写返回结果
4.确保map中所有value满足条件
  使用PredicateMap验证keyvalue,当一个entry输入时,不满足条件,会抛出IllegalArgumentException
  PredicateMap.decorate(newHashMap(), oneP,twoP)
5.实现LRUcache
  LRUMap:保存固定容量的entry,当插入新的entry时覆盖原来的,
  用于:向用户显示数据,如排行榜的实现
  如果使用很多cache,可考虑专门的缓存实现
6.lazyMap
  实现懒加载,如操作数据库,通过primarykey获取对象时,在内部通过tranformer获取真正的records
7.MapUtils
  mapDouble——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的最大最小&#20540;
3.Number Range的使用
  使用Range接口,及其实现NumberRange DoubleRange   FLoatRange  IntRange 。有用函数是contain  getMin  getMax
4.产生水机变量
6.进行样本统计
7.进行线性代数运算
8.复数的数学运算
9.建立线性函数
10.估计程序运行时间
  原理:使用SimpleRegression,添加数据点后,SimpleRegression会根据数据点的&#20540;,求出y=a*x&#43;b的线性函数,当进行数据库访问时,假设每个记录的处理时间大致相等,可使用SimpleRegression进行估算,并使用StopWatch提供SimpleRegression需要的数据点。
第十章I/O和网络
IO相关
1.Stream  bytes[]   ReaderWriter的复制
  使用CopyUtils实现各种源到目的的复制,使用4KB缓存,注意源和目的的flushclose
  使用IOUtils.toString() 复制从ReaderInputStream)——》String
2.关闭Stream WriterReader
  使用IOUtils.closeQuietly避免捕获异常
3.测量stream的字节数
  使用CountingInputStreamCountingOutputStreamstream进行decorate,调用CountingXXXStreamwrite/read后,调用getCount可获得字节数
4.splite  outputStream
  output发送到两个OutputStream
  注意使用flush输出,并使用closeQuietly悄悄关闭
文件
1.可读方式显示文件大小
  FileUtils.byteCountToDisplaySize()
2.复制文件StringURLs
  FileUtils.copyFIle() 复制文件到另一个文件
  FileUtils.copyFileToDirectory 复制文件到目录
  FileUtils.writeStringToFile: 将String写入到文件中
  FileUtils.copyURLToFile:将URL的内容复制到文件,可用来实现保存网址内容
3.递归删除目录
  FileUtils.deleteDirectory   cleanDirectory
4.获得文件夹大小
  FileUtils.sizeOfDirectory
5.过滤Directory下的文件
  定义在commons.io.filefilter包中的filter都实现了IOFilter接口,可对filefileName进行过滤,具体有PrefixFileFilter SuffixFileFilter   NameFileFiliter   DirectoryFilter(只接收directory参数) AndFileFilter  FileFilter    NotFileFilter



第十一章HttpWebDev
HttpClient是一个Http协议的客户端,支持getpost put  options  headdelete。支持多种认证机制basic digestNTLM.支持httpshttp,管理session状态、cookie信息
         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138993-1-1.html 上篇帖子: 卸载Visual Studio Tools for Apache Cordova CTP 3.0 下篇帖子: 【Java Servlet 开发系列之一】在mac系统安装Apache Tomcat的详细步骤
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表