Jakarta Commons Cookbook书摘
2013-03-03 15:02
246 查看
阅读该书时,才发现,平时一些很费劲的代码,通过Apache.common的 工具包,可以得到很大的简化。下面以问题、平时做法,推荐做法(调用common这个包来实现)来做记录
问题 1
实现toString方法,输出bean的各个属性值
平时做法
属性名+get方法,例如 "name:" + bean.getName + ";value:" + bean.getValue
推荐做法
问题 2
在方法一开始,要判断参数是否为空
平时做法
自己写代码做判断以及异常的处理,例如
推荐做法
使用Validate类,例如
Validate.notEmpty(para, "para must not be empty"),当para为empty时,会往外抛出异常
问题 3
计算方法执行时间
平时做法
推荐做法
使用StopWatch,简单的情况下,这两种方法没太大区别,但当你的计算场景越复杂,StopWatch,可以让代码更清晰,更灵活些
问题 4
需要对文本进行处理
平时做法
自己写方法,以下省略血泪史四千字……
推荐做法
醒醒吧!!StringUtils 基本都帮你做了!
检查空字符串,isBlank()
缩减字符串,abbreviate()
搜索嵌套字符串串,substringBetween()
去掉字符串尾部的换行符和回车符, chomp()
……总之,基本没你什么事,直接用吧。。
问题 5
需要一组数据根据多个排序条件进行排序,且该数据不是来源于数据库,因此只能在程序中进行排序
平时做法
自己写comparator,而且要根据多个条件进行排序,因此comparator里面,就要if后又if,把自己都给绕晕了
推荐做法
将两个东西组到一起,就可以方便地解决问题:1、beanutil所带的BeanComparator,可以进行基本的排序,例如字符串默认按A-Z正序排序,数字默认按从小到大排序;2、ComparatorChain,可以把多个Comparator组到一起,按添加的先后顺序,进行排序,例如如果通过第一个comparator对比时,两者相同,则再用下一个comparator进行对比。例子如下:
问题 6
需要关闭各种流(InputStream等)
平时做法
在finally块中关闭流。但为防止close方法抛出异常,需要再包一层try/catch。例如
推荐做法
同样还是在finally块中关闭流,但可以通过
IOUtils.closeQuietly(inStream)
一行代码来解决上面五行代码做的事情(1、前提是你不用对catch到的异常做处理;2、这个方法的实现,其实就是那五行代码。)
问题 7
有一组数据,作为一个值写到了配置文件中,之后需要再读出来,还原成一组数据
配置文件可能像这样:macToImport = iPhone1,iPhone2,iPhone3。
平时做法
小组有人封装过读取配置文件的工具类,但读出来的值都为String类型的。例如我只能读到“iPhone1,iPhone2,iPhone3”,然后我再用spilt(",")把这个str转换成list
推荐做法
通过Configuration类的getList方法。
例如:
Configuration config = new PropertiesConfiguration("test.properties");
List names = config.getList("names");
问题 8
需要统计list中,有多少个元素满足给定条件
平时做法
//伪代码
int num = 0;
for(bean:list)
{
if(某个条件)
{
keum ++;
}
}
推荐做法
使用CollectionUtils.countMatches(list,Predicate);
问题 9
页面的表单(form)提交到后台,后台收到值后,根据值类型的不同,需做不同的处理,再填到一个bean中
平时做法
推荐做法
先定义方法
注意使用该方法必须有一个前提,你的数据bean(如本例中的VersionDetailInfo)需要按照java bean的定义,有set和get方法,例如你的bean中有copyRight这个属性,那也要有setCopyRight和getCopyRight这两个方法,然后BeanUtils.getProperty中的参数name就是"copyRight"
问题 1
实现toString方法,输出bean的各个属性值
平时做法
属性名+get方法,例如 "name:" + bean.getName + ";value:" + bean.getValue
推荐做法
在方法一开始,要判断参数是否为空
平时做法
自己写代码做判断以及异常的处理,例如
使用Validate类,例如
Validate.notEmpty(para, "para must not be empty"),当para为empty时,会往外抛出异常
问题 3
计算方法执行时间
平时做法
使用StopWatch,简单的情况下,这两种方法没太大区别,但当你的计算场景越复杂,StopWatch,可以让代码更清晰,更灵活些
需要对文本进行处理
平时做法
自己写方法,以下省略血泪史四千字……
推荐做法
醒醒吧!!StringUtils 基本都帮你做了!
检查空字符串,isBlank()
缩减字符串,abbreviate()
搜索嵌套字符串串,substringBetween()
去掉字符串尾部的换行符和回车符, chomp()
……总之,基本没你什么事,直接用吧。。
问题 5
需要一组数据根据多个排序条件进行排序,且该数据不是来源于数据库,因此只能在程序中进行排序
平时做法
自己写comparator,而且要根据多个条件进行排序,因此comparator里面,就要if后又if,把自己都给绕晕了
推荐做法
将两个东西组到一起,就可以方便地解决问题:1、beanutil所带的BeanComparator,可以进行基本的排序,例如字符串默认按A-Z正序排序,数字默认按从小到大排序;2、ComparatorChain,可以把多个Comparator组到一起,按添加的先后顺序,进行排序,例如如果通过第一个comparator对比时,两者相同,则再用下一个comparator进行对比。例子如下:
需要关闭各种流(InputStream等)
平时做法
在finally块中关闭流。但为防止close方法抛出异常,需要再包一层try/catch。例如
同样还是在finally块中关闭流,但可以通过
IOUtils.closeQuietly(inStream)
一行代码来解决上面五行代码做的事情(1、前提是你不用对catch到的异常做处理;2、这个方法的实现,其实就是那五行代码。)
问题 7
有一组数据,作为一个值写到了配置文件中,之后需要再读出来,还原成一组数据
配置文件可能像这样:macToImport = iPhone1,iPhone2,iPhone3。
平时做法
小组有人封装过读取配置文件的工具类,但读出来的值都为String类型的。例如我只能读到“iPhone1,iPhone2,iPhone3”,然后我再用spilt(",")把这个str转换成list
推荐做法
通过Configuration类的getList方法。
例如:
Configuration config = new PropertiesConfiguration("test.properties");
List names = config.getList("names");
问题 8
需要统计list中,有多少个元素满足给定条件
平时做法
//伪代码
int num = 0;
for(bean:list)
{
if(某个条件)
{
keum ++;
}
}
推荐做法
使用CollectionUtils.countMatches(list,Predicate);
页面的表单(form)提交到后台,后台收到值后,根据值类型的不同,需做不同的处理,再填到一个bean中
平时做法
//如果表单提交的值和dbVersionInfo中的对应值不一样,则将表单值设到dbVersionInfo中 if(!copyRight.equals(dbVersionInfo.getCopyRight())) { dbVersionInfo.setCopyRight(copyRight); } if(!firstName.equals(dbVersionInfo.getFirstName())) { dbVersionInfo.setFirstName(firstName); }
推荐做法
先定义方法
private void isValueModify(VersionDetailInfo dbVersionInfo, String valueInput, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { if(null != valueInput && !valueInput.equals(BeanUtils.getProperty(dbVersionInfo, name))) { BeanUtils.setProperty(dbVersionInfo, name, valueInput); valueChange ++; } }
isValueModify(dbVersionInfo, copyRight, "copyRight"); isValueModify(dbVersionInfo,firstName, "firstName");
注意使用该方法必须有一个前提,你的数据bean(如本例中的VersionDetailInfo)需要按照java bean的定义,有set和get方法,例如你的bean中有copyRight这个属性,那也要有setCopyRight和getCopyRight这两个方法,然后BeanUtils.getProperty中的参数name就是"copyRight"
相关文章推荐
- Jakarta Commons Cookbook
- 开始翻译Jakarta Commons Cookbook。
- [HttpClient] 创建一个HTTP POST 请求 (from Jakarta Commons cookbook 11.7 )
- jakarta Commons Cookbook笔记1
- Jakarta Struts Cookbook
- Python wmi Cookbook 中文翻译
- Python Cookbook (1) 文本
- Chef学习之八:Resource cookbook_file学习
- python cookbook 学习笔记 -- 1.2 字符与字符值间转换
- Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
- iPhone developer's Cookbook -- Chapter 1 Introduction
- SQL Cookbook—数字、日期
- Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
- jsoup Cookbook(中文版)
- すべての始まり~~开始学习Python Cookbook
- MDX Cookbook 02 - 除数为零的问题
- Python Cookbook学习记录 ch2_1_2013/10/27
- Python Cookbook学习记录 ch6_2_2013/11/7
- OpenCV2 cookbook source code analyse - histogram