guava 实用操作集合

系统 1784 0

guava 是 google 几个java核心类库的集合,包括集合、缓存、原生类型、并发、常用注解、基本字符串操作和I/O等等。 
   
   大家平时经常遇到某些相同的问题,自己写代码也都能解决。但是久而久之会感觉到很痛苦,因为我们一而再,再而三的重复发明轮子。为了不再忍受痛苦,也许我们可以总结自己的类库,但是新的问题来了。自己总结的类库很难与大家分享,不能帮助到更多人。同时自己的类库要不断的进行维护。guava 正是出于这样的目的而来的。 

   只说不练不行啊,让我们举上一两个例子 
判断 String不为null,且不为空  

Java代码   收藏代码
  1. String str=...;  
  2. //use java   
  3. if (str != null  && !str.isEmpty()){  
  4.      //do something   
  5. }  
  6.   
  7.   
  8. //use guava   
  9. if (!Strings.isNullOrEmpty(str)){  
  10.      //do something   
  11. }  

上而的例子还不是很给力,让我们举一个更给力的例子。 复制文件  
Java代码   收藏代码
  1. File from=...;  
  2. File to=...;  
  3.   
  4. //use java   
  5. FileInputStream in= new  FileInputStream(from);  
  6. FileOutputStream out= new  FileOutputStream(to);  
  7. byte [] buff= new   byte [ 1024 ];  
  8. int  readLength=- 1 ;  
  9. while ((readLength = in.read(buff)) >  0 ){  
  10.     out.write(buff,  0 , readLength);  
  11. }  
  12. in.close();  
  13. out.close();  
  14.   
  15. //use guava   
  16. Files.copy(from,to);  //注意,只用了一行代码噢   


    通过上面的例子,已经能感觉到guava的强大。接下来,让我们更深入看看guava的其他功能。 guava(r09-api) 分为这几个包 
  • base               基本的工具类与接口
  • io                  io流相关的工具类与方法
  • net                网络地址相关的工具类与方法
  • primitives         原始类型的工具类
  • collect            通用集合接口与实现,与其集合相关工具类
  • util.concurrent  并发相关工具类


base  

字符串相关工具类  
Strings  
Java代码   收藏代码
  1. public   class  StringsTest {  
  2.      @Test   
  3.      public   void  test() {  
  4.          //将空字符串转换为null   
  5.         Assert.assertEquals( null , Strings.emptyToNull( "" ));  
  6.          //将null转换为空字符串   
  7.         Assert.assertEquals( "" , Strings.nullToEmpty( null ));  
  8.          //判断字符串为null或者为空   
  9.         Assert.assertTrue(Strings.isNullOrEmpty( "" ) && Strings.isNullOrEmpty( null ));  
  10.          //将字符串重复   
  11.         Assert.assertEquals( "javajavajava" , Strings.repeat( "java" 3 ));  
  12.     }  
  13. }  


CharMatcher  
Java代码   收藏代码
  1. public   class  CharMatcherTest {  
  2.      @Test   
  3.      public   void  test() {  
  4.         String source =  "a1b2c3" ;  
  5.         CharMatcher matcher = CharMatcher.DIGIT;  //预定义的 DIGIT 类型   
  6.         Assert.assertTrue(mathcer.match( '8' ));  
  7.         Assert.assertEquals( "123" , matcher.retainFrom(source));  
  8.         Assert.assertEquals( 3 , matcher.countIn(source));  
  9.         Assert.assertEquals( "abc" , matcher.removeFrom(source));  
  10.         Assert.assertEquals( "a2b3c" , matcher.trimFrom( "1a2b3c4" ));  
  11.     }  
  12. }  

Jioner  
Java代码   收藏代码
  1. public   class  JoinerTest {  
  2.      @Test   
  3.      public   void  test() {  
  4.         Assert.assertEquals( "2011-08-04" , Joiner.on( "-" ).join( "2011" "08" "04" ));  
  5.     }  
  6. }  


Splitter  
Java代码   收藏代码
  1. public   class  SplitterTest {  
  2.      @Test   
  3.      public   void  test() {  
  4.         Splitter.on( ',' ).split( "a,b" );  //结果返回Iterable<String>,包含 "a" and "b"   
  5.          //将结果中的元素trim   
  6.          //结果依然包含  "a" 和 "b" ,而不是 "a " 和 " b"   
  7.         Splitter.on( ',' ).trimResults().split( "a , b" );   
  8.          //忽略空字符串   
  9.          //结果必须是"a" 和 "b",而不是 "a" ,"" 和 "b"   
  10.         Splitter.on( ',' ).omitEmptyStrings().split( "a,,b" );   
  11.     }  
  12. }  


CaseFormat  
Java代码   收藏代码
  1. public   class  CaseFormatTest {  
  2.   
  3.      @Test   
  4.      public   void  test()  throws  IOException {  
  5.          // helloGuava => HELLO_GUAVA   
  6.         Assert.assertEquals( "HELLO_GUAVA" , CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE,  "helloGuava" ));  
  7.          // hello-guava => HelloGuava   
  8.         Assert.assertEquals( "HelloGuava" , CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL,  "hello-guava" ));  
  9.     }  
  10. }  


其他  
Preconditions  
有些方法在执行前,先要检查传入的参数是否正确,或者类的状态是否正确。通常会这样做
Java代码   收藏代码
  1. if  (count <=  0 ) {  
  2.         throw   new  IllegalArgumentException( "must be positive: "  + count);  
  3. }  

guava就可以这样,达到相同的效果 
Java代码   收藏代码
  1. Preconditions.checkArgument(count >  0 "must be positive: %s" , count);  


I/O  
ByteStreams 提供了针对字节流的工具方法 
Java代码   收藏代码
  1. InputStream from=...;  
  2. OutputStream to=...;  
  3. ByteStreams.copy(from,to);  //复制   


CharStreams 提供了针对字符流的工具方法 
Java代码   收藏代码
  1. Reader from =...;  
  2. Writer to =...;  
  3. CharStreams.copy(from, to);  //复制   


Files 提供了针对文件的工具方法 
Java代码   收藏代码
  1. File from=...;  
  2. File to=...;  
  3. Files.copy(from, to);  //复制   

Java代码   收藏代码
  1. Files.deleteDirectoryContents(File directory);  //删除文件夹下的内容(包括文件与子文件夹)   
  2. Files.deleteRecursively(File file);  //删除文件或者文件夹   
  3. Files.move(File from, File to);  //移动文件   


Resources 提供了针对classpath下资源操作的工具方法 
Java代码   收藏代码
  1. URL url = Resources.getResource( "config.xml" );  //获取classpath根下的config.xml文件url   

guava 实用操作集合


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论