`
hellojava
  • 浏览: 13316 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Commons最最常用的方法总结

    博客分类:
  • java
阅读更多

前面一段时间把commons包过了一遍,倒不是为了全面了解这些包的用法,而是为了能够大致了解这些包的功能,在平时需要用到的时候能够想到用它们而已。包含如下几种常用的commons包:

commons-lang

commons-collections

commons-io

commons-beanutils

对这些包最常用的类都试用了一下,很多方法好用但是都不常用,结合一般写code的经验,把最最常用的几种归纳如下。

 

1 数组Object-primitive转换问题

尽管jdk1.5之后Object和primitive已经实现了自动装箱拆箱,但是对于数组还是会遇到Object类型数组和primitive数组的转换问题,比如一个Integer[]和int[]的转换问题。

特别是当和list配置使用的时候,list只能够转化为Object类型数组,比如下面是一段常用代码:

 List<Integer> intList=new ArrayList<Integer>();
  intList.add(1);
  intList.add(2);
  Integer[] objectArray=intList.toArray(new Integer[0]);
  int[] primitiveArray=ArrayUtils.toPrimitive(objectArray);

  System.out.println(primitiveArray);//输出为[I@109a4c
  System.out.println("intArray: " + ArrayUtils.toString(primitiveArray));//输出为intArray: {1,2}

 

 这个时候使用ArrayUtils.toPrimitive和ArrayUtils.toObject方法就能够在Object数组和primitive数组之间进行方便的转换,否则也就不得不使用for循环去做转换操作了。

 

2 数组输出显示问题

在System.out或者写log的时候,和各个Collection类分别覆盖了toString()方法不同,数组的System.out默认就是"[I@109a4c"这种方式的字符串,其中"[I"标识是数组类型,"@109a4c"就是对象标识了。

使用ArrayUtils的toString则能够实现数组的输出,如上面的代码示例。

 

3 数组的add或者sub操作

对于Object类型数组来说,是很好处理的,比如可以使用泛型操作写一个工具类兼容各种类型,但是对于primitive数组来说,就不能自己写方法了。

ArrayUtils的addAll,subarray方法提供了对primitive数组进行处理的方法。

另外java.util.Arrays类也提供了部分方法。

 

4 List初始化和赋值问题

new一个List然后接着对其赋值是一个很麻烦的操作,比如写代码的时候很讨厌new一个ArrayList出来,然后不停地add,比如如下的代码:

List<Integer> intList=new ArrayList<Integer>();
intList.add(1);
intList.add(2);
 

因此希望能够向数组那样在new的同时进行初始化,比如:

int[] intArrays=new int[]{1,2};

 

java.util.Arrays类提供了asList方法,如下:

public static <T> List<T> asList(T... a) {
 return new ArrayList<T>(a);
    }

 

但是使用这个方法的时候需要注意,代码里面return new ArrayList<T>(a);其实返回的是一个java.util.Array.ArrayList类,而不是我们常用的java.util.ArrayList,这个ArrayList是没有实现add方法的,所以说是一个不能扩展的list,使用的时候需要特别小心。

 

对于这个问题,commons包也没有什么方便方法,但是google collection包倒是提供了Lists.newArrayList方法解决了问题,比如:

List<Integer> intList = Lists.newArrayList(1,2);

 

因此使用的时候可以使用该方法,或者自己实现一个,也比较简单。

 

5 输入输出和文件读写

  commons-io包中的IOUtils类提供了很多IO的方便方法,最主要的是copy方法,提供输入输出流之间的转换,包含了 inputstream,outputstream,reader,writer这几种常用的类。如下代码所示:

  

InputStream in = new FileInputStream("NOTICE.txt");
  OutputStream out =new FileOutputStream("NOTICE1.txt");
  IOUtils.copy(in, out);
  IOUtils.closeQuietly(in);//完成了文件读写



  Reader reader = new FileReader("NOTICE1.txt");
  IOUtils.copy(reader, System.out);//完成了文件输出到控制台
  IOUtils.closeQuietly(reader);

  

   另外IOUtils.toString则能够很方便地将文件内容返回为String,如下所示:

InputStream in = new FileInputStream("NOTICE.txt");
String content=IOUtils.toString(in);

 

6 Collection和Map的遍历处理

common-Collections包提供了对Collection进行遍历然后对每个对象进行处理的方法,在实际中很有用。

 

Closure closure = new Closure() {
      public void execute(Object input) {
            StringBuffer sb = (StringBuffer) input;
            sb.append("append by closure!");
			}
		};
Set<StringBuffer> bufferSet = new HashSet<StringBuffer>();
bufferSet.add(new StringBuffer());
bufferSet.add(new StringBuffer());
CollectionUtils.forAllDo(bufferSet, closure);
System.out.println(ArrayUtils.toString(bufferSet));

 另外对于Map的遍历,采用了迭代器MapIterator对Map进行迭代访问,而不用采用map.keySet().iterator()这种麻烦的方式,如下所示。

                                Map bidiMap=new HashMap();
		MapIterator it = bidiMap.mapIterator();
		while (it.hasNext()) {
			Object key = it.next();
			Object value = it.getValue();
			System.out.println(key + "*****" + value);
		}

   此外也提供了OrderedMap来达到FIFO,按照put的顺序自动排序的Map,而不需要构造Compare进行排序。

                                OrderedMap map = new LinkedMap();
		map.put("FIVE", "5");
		map.put("SIX", "6");
		map.put("SEVEN", "7");
		System.out.println(map.firstKey()); // returns "FIVE"
		System.out.println(map.nextKey("FIVE")); // returns "SIX"
		System.out.println(map.nextKey("SIX")); // returns "SEVEN"

 

1
0
分享到:
评论

相关推荐

    commons-io-2.CHM

    打开FileUtils的api文档,我们抽出一些工作中比较常用的方法,进行总结和讲解。总结如下: cleanDirectory:清空目录,但不删除目录。 contentEquals:比较两个文件的内容是否相同。 copyDirectory:将一个目录...

    文件上传两个插件和使用介绍总结

    里面有两个压缩有一个docx文件,一个txt文件,两个压缩包正是现在最流行使用的java文件上传插件commons-fileupload1.2.2和commons-io.1.3.2,和我个人总结的使用方法。相信看完我上传的文件你会懂的使用这两个上传...

    最新Struts2+jq+ajax+json 学会总要4步‵‵超级简单,里面包含实例

    学会struts+jq+ajax+json只要4步‵‵经过作者的总结超级简单 1. 导入struts2 及json包 asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1....

    Spring_MVC_051:Spring MVC 学习总结(五)——校验与文件上传

    Spring MVC 学习总结(五)——校验与文件上传 目录 2.2.7、范围 2.2.8、其它注解 2.3、注解控制器参数 1.4、在UI中添加错误标签 1.5、测试运行 三、使用jQuery扩展插件Validate实现前端校验 3.1、jQuery扩展插件...

    jpivot学习总结.doc

    属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。 Level 的属性如下: 属性名 含义 name 名称 ...

    解决webpack -p压缩打包react报语法错误的方法

    最近在用webpack打包react代码的时候发现一个问题,做一个处理总结分享出来给大家,下面来一起看看详细的介绍: 我的webpack配置: var webpack = require('webpack'); //打包less插件 var ExtractTextPlugin = ...

    ssh(structs,spring,hibernate)框架中的上传下载

    3. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 4. destroy-method="close"> 5. 6. 7. 8. 9. 10. !-- Hibernate会话工厂配置 //--> 11. 12. class="org.springframework.orm....

    jedis使用指南

    import org.apache.commons.pool.impl.GenericObjectPool.Config; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.Transaction; /** * @author Teaey */ ...

    springmybatis

    后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. ...

    Java学习笔记-个人整理的

    {8.1}线程的常用属性与方法}{121}{section.8.1} {8.2}后台线程}{123}{section.8.2} {8.3}创建线程的两种方法}{123}{section.8.3} {8.4}Runnable}{123}{section.8.4} {8.5}Sleep阻塞与打断唤醒}{124}{section....

    圣人注视下的人民百科:维基百科学术研究的系统回顾-研究论文

    我们描述了用于识别 450 多项维基百科学术研究的详细、严格的方法。 我们展示了 WikiLit 网站(http wikilit dot referata dot com),其中详细描述了此处审查的大多数论文。 在本文的主要部分,我们对研究进行了...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.3.1. 初始化web配置 3.4.3.2. Request作用域 ...

    Spring中文帮助文档

    8.3.5. 常用注解 8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源...

    Spring API

    8.3.5. 常用注解 8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源...

    Activiti6.0教程例子下载

    例如开发一个系统最关键的部分不是系统的界面,也不是和数据库之间的信息交换,而是如何根据业务逻辑开发出符合实际需要的程序逻辑并确保其稳定性、易维护性和弹性。 比如你的系统中有一个任务流程,一般情况下这个...

    Spring 2.0 开发参考手册

    3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.4. 自定义作用域 3.5. 定制bean特性 3.5.1. Lifecycle接口 3.5.2. 了解自己 3.6. bean定义的...

    spring chm文档

    3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.4. 自定义作用域 3.5. 定制bean特性 3.5.1. Lifecycle接口 3.5.2. 了解自己 3.6. bean定义的...

Global site tag (gtag.js) - Google Analytics