Guava 实用操作集合

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  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Intellj Idea 如何设置类头注释和方法注释

intellj idea 如何设置类头注释和方法注释intellj idea的强大之处就不多说了&#xff0c;相信每个用过它的人都会体会到&#xff0c;但是我们也会被他的复杂搞的晕头转向&#xff0c;尤其刚从eclipse转过来的童鞋&#xff0c;相信刚开始的那段经历都是不堪回首的&#xff0c;我…

Logback介绍及入门

Logback简介 Logback是由log4j创始人设计的又一个开源日志组件。 logback当前分成三个模块&#xff1a;logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API…

数据库事务隔离级别

数据库事务的隔离级别有4个&#xff0c;由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable&#xff0c;这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 √: 可能出现 : 不会出现 脏读不可重复读幻读Read uncommitted√√√Read c…

分布式服务框架Dubbo使用小结

介绍&#xff1a; Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA 服务治理方案&#xff0c;每天为2,000个服务提供3,000,000,000次访问量支持&#xff0c;并被广泛应用于阿里巴巴…

XML解析-Dom4j的DOM解析方式更新XML

Dom4j工具,是非官方的&#xff0c;不在jdk中。 使用步骤&#xff1a; 1&#xff09;导入dom4j的核心包。 dom4j-1.6.1.jar 2&#xff09;编写Dom4j读取xml文件的代码 1、更新XML 1.1、写出内容到xml文档 package com.rk.xml.g_dom4j_write;import java.io.File; import java.io…

Qt前端技术:5.QSS

这个是表示QFrame中的pushButton中的子类和它子类的子类都将背景变为red 写成大于的时候表示只有直接的子类对象才会变 这个图中的QGroupBox和QPushButton都是QFrame的直接的子类 这个中的QGroupBox是QFrame的直接的子类但是QPushButton 是QGroupBox的子类&#xff0c;QPushB…

Spring定时任务的几种实现

近日项目开发中需要执行一些定时任务&#xff0c;比如需要在每天凌晨时候&#xff0c;分析一次前一天的日志信息&#xff0c;借此机会整理了一下定时任务的几种实现方式&#xff0c;由于项目采用spring框架&#xff0c;所以我都将结合 spring框架来介绍。 一&#xff0e;分类 从…

解决quartz的job无法注入spring对象

一般情况下&#xff0c;quartz的job中使用autowired注解注入的对象为空&#xff0c;这时候我们就要使用spring-quartz提供的AdaptableJobFactory类。 自定义一个类: [java] view plaincopy public class JobFactory extends AdaptableJobFactory { Autowired …

Activiti 基础概念

1、ProcessInstance 与ProcessDefinition 流程实例&#xff08;ProcessInstance&#xff09;和流程定义&#xff08;ProcessDefinition&#xff09;的关系&#xff0c;与类和实例对象的关系有点像&#xff0c;ProcessDefinition是整个流程步骤的说明而ProcessInstance就是指流程…

IP地址开启https

证书生成导入 keytool -genkey -alias ssozzjz5 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -dname "CN192.168.1.128,OUcsoa,Ocsoa,LFZ,STFZ,CCN" -ext sanip:192.168.1.128 -validity 3600 -keystore D:\ssozzjz5.keystorekeytool -export -f…

JDK线程池CompletionService的使用

最近使用多线程优化了一个非常耗时的ping任务&#xff0c;下面的是未优化的源代码&#xff0c;大致就是遍历es取出的list&#xff0c;然后循环判断是否能ping通&#xff1a; SearchResponse searchResponse client.search(searchRequest); Iterator it searchResponse.getHi…

解决mediawiki上传文件文件名是中文上传失败

公司内部的wiki是用的mediawiki&#xff0c;其它都还好就是上传文件时文件名中有中文就不能上传&#xff0c;这次下决心要修复这个问题&#xff0c;一开始我还以为是哪里需要配置一下&#xff0c;然后搜了半天发现这是一个官方的bug&#xff1a; 好吧&#xff0c;是官方bug也好…

Metricbeat添加ip address信息

Metricbeat默认输出信息里没有ip地址&#xff0c;6.3版本之后可以通过add_host_metadata 来开启附带ip信息&#xff08;没测试过&#xff09; 原本我是通过修改modules.d/system.yml文件&#xff0c;在每项后面加自定义fields.ip字段来添加ip信息&#xff0c;类似下面这样&…

前端获取不了rest请求自定义headers的问题

前端response中的自定义header信息默认同一域中可见 在crossdomain跨域情况下需要在服务器端增加Access-Control-Expose-Headers的支持 例如在springboot中需要使用addExposedHeader添加指定返回头&#xff1a; Configuration public class CORSConfiguration implements WebM…

如何右键文件夹以Sublime 打开

最近总是拖动文件在Sublime Text 的运行环境下&#xff0c;想着能否鼠标右键打开项目文件夹。以下是具体操作步骤 1 windows下打开运行(或者在windowr); 2 输入regedit 进入window配置列表里面 3 在注册表编辑器中找的这个节点&#xff1a;在 HKEY_CLASSSES_ROOT→Folder ll…

高性能网站建设指南

进行优化前&#xff0c;关键是剖析当前的web性能&#xff0c;找到性能瓶颈&#xff0c;从而确定最需改进的地方;如果精力有限&#xff0c;首先将精力放在能明显提升性能的改进点上; 《高性能网站建设指南》提出了一个性能黄金法则&#xff1a; 只有10%-20%的最终用户响应时间花…

js来读写cookie操作

因为之前公司的项目前后端是在一起的&#xff0c;因为要用vue来重构之前的项目。所以token签名要作为一个参数传递到后台。所以就遇到两个问题,1 token的保存和获取的问题。 2 token 判断。判断用户是否用token值。 首先先说一下 token的保存和获取问题。 保存到哪&#xff1…

MUI tab选项卡之间的切换和数据获取

查看mui官网上面的例子&#xff0c;会看到有多种tab 选项卡的例子&#xff0c;我就写下我用到的tab选项卡。写了个简单的例子&#xff0c;效果如下图 主页面的代码 <nav class"mui-bar mui-bar-tab"><a class"mui-tab-item mui-active" href"…

ECharts 联动效果

在使用ECharts 时候要用到联动的&#xff0c;比如下面的示例图&#xff0c;当鼠标经过A的图的时候&#xff0c;这个时候有提示&#xff0c;然后让B的提示也显示出来。这样一个效果。 官方文档给的配置项&#xff0c; http://echarts.baidu.com/api.html#echarts.connect var my…

Git Permission to fazhiyun86/Test.git denied to MarRoar

先说明问题。在我的电脑上有两个SSH key&#xff0c;也就是有两个GitHub账户。我们在GitHub账户里面配置好 SSH key 的时候&#xff0c;就可以向自己的GitHub账户的仓库里面push 代码。 我们先在第一个账户push 代码的时候会让输入 用户名和密码。当向另一个账户push 东西的时…