guava 工具类及代码

本文介绍了Google Guava库在字符串处理、集合操作和文件IO方面的实用工具类,如Joiner、Splitter、Strings、Preconditions、Objects、FluentIterable、Sets、Maps、Table、Files等,展示了它们在连接字符串、分割字符串、断言、对象比较、迭代过滤、集合转换、文件读写等方面的高效用法。
摘要由CSDN通过智能技术生成

原文地址 :http://blog.csdn.net/ac_dao_di/article/details/53750028

github : https://github.com/google/guava

Maven:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>24.0-jre</version>
  <!-- or, for Android: -->
  <version>24.0-android</version>
</dependency>

jar :

    https://github.com/google/guava/releases/tag/v24.0

一、概述

    Guava是对Java API的补充,对Java开发中常用功能进行更优雅的实现,使得编码更加轻松,代码容易理解。Guava使用了多种设计模式,同时经过了很多测试,得到了越来越多开发团队的青睐。Java最新版本的API采纳了Guava的部分功能,但依旧无法替代。本文以Getting Started With Google Guava原文为学习材料,对Guava中常用的API进行学习,尽量覆盖比较有用的API,包括字符串处理,集合类处理,文件IO处理等。

二、字符串连接器Joiner

2.1 连接多个字符串并追加到StringBuilder

[java]  view plain  copy
  1. StringBuilder stringBuilder = new StringBuilder("hello");  
  2. // 字符串连接器,以|为分隔符,同时去掉null元素  
  3. Joiner joiner1 = Joiner.on("|").skipNulls();  
  4. // 构成一个字符串foo|bar|baz并添加到stringBuilder  
  5. stringBuilder = joiner1.appendTo(stringBuilder, "foo""bar"null"baz");  
  6. System.out.println(stringBuilder); // hellofoo|bar|baz  

2.2 连接List元素并写到文件流

[java]  view plain  copy
  1. FileWriter fileWriter = null;  
  2. try{  
  3.     fileWriter = new FileWriter(new File("/home/gzx/Documents/tmp.txt"));  
  4. }  
  5. catch(Exception e){  
  6.     System.out.println(e.getMessage());  
  7. }  
  8. List<Date> dateList = new ArrayList<Date>();  
  9. dateList.add(new Date());  
  10. dateList.add(null);  
  11. dateList.add(new Date());  
  12. // 构造连接器:如果有null元素,替换为no string  
  13. Joiner joiner2 = Joiner.on("#").useForNull("no string");  
  14. try{  
  15.     // 将list的元素的tostring()写到fileWriter,是否覆盖取决于fileWriter的打开方式,默认是覆盖,若有true,则是追加  
  16.     joiner2.appendTo(fileWriter, dateList);  
  17.     // 必须添加close(),否则不会写文件  
  18.     fileWriter.close();  
  19. }  
  20. catch(IOException e){  
  21.     System.out.println(e.getMessage());  
  22. }  

最后tmp.txt的内容为:

Tue Dec 20 16:51:09 CST 2016#no string#Tue Dec 20 16:51:09 CST 2016

2.3 将Map转化为字符串

[java]  view plain  copy
  1. Map<String, String> testMap = Maps.newLinkedHashMap();  
  2. testMap.put("Cookies""12332");  
  3. testMap.put("Content-Length""30000");  
  4. testMap.put("Date""2016.12.16");  
  5. testMap.put("Mime""text/html");  
  6. // 用:分割键值对,并用#分割每个元素,返回字符串  
  7. String returnedString = Joiner.on("#").withKeyValueSeparator(":").join(testMap);  
  8. System.out.println(returnedString); // Cookies:12332#Content-Length:30000#Date:2016.12.16#Mime:text/html  

三、 字符串分割器Splitter

3.1 将字符串分割为Iterable

[java]  view plain  copy
  1. // 分割符为|,并去掉得到元素的前后空白  
  2. Splitter sp = Splitter.on("|").trimResults();  
  3. String str = "hello | world | your | Name ";  
  4. Iterable<String> ss = sp.split(str);  
  5. for(String it : ss){  
  6.     System.out.println(it);  
  7. }  

结果为:

hello
world
your
Name

3.2 将字符串转化为Map

[java]  view plain  copy
  1. // 内部类的引用,得到分割器,将字符串解析为map  
  2. Splitter.MapSplitter ms = Splitter.on("#").withKeyValueSeparator(':');  
  3. Map<String, String> ret = ms.split(returnedString);  
  4. for(String it2 : ret.keySet()){  
  5.     System.out.println(it2 + " -> " + ret.get(it2));  
  6. }  
结果为:
Cookies -> 12332
Content-Length -> 30000
Date -> 2016.12.16
Mime -> text/html

四、 字符串工具类Strings

[java]  view plain  copy
  1. System.out.println(Strings.isNullOrEmpty("")); // true  
  2. System.out.println(Strings.isNullOrEmpty(null)); // true  
  3. System.out.println(Strings.isNullOrEmpty("hello")); // false  
  4. // 将null转化为""  
  5. System.out.println(Strings.nullToEmpty(null)); // ""  
  6.   
  7. // 从尾部不断补充T只到总共8个字符,如果源字符串已经达到或操作,则原样返回。类似的有padStart  
  8. System.out.println(Strings.padEnd("hello"8'T')); // helloTTT  

五、字符匹配器CharMatcher

5.1 空白一一替换

[java]  view plain  copy
  1. // 空白回车换行对应换成一个#,一对一换  
  2. String stringWithLinebreaks = "hello world\r\r\ryou are here\n\ntake it\t\t\teasy";  
  3. String s6 = CharMatcher.BREAKING_WHITESPACE.replaceFrom(stringWithLinebreaks,'#');  
  4. System.out.println(s6); // hello#world###you#are#here##take#it###easy  

5.2 连续空白缩成一个字符

[java]  view plain  copy
  1. // 将所有连在一起的空白回车换行字符换成一个#,倒塌  
  2. String tabString = "  hello   \n\t\tworld   you\r\nare             here  ";  
  3. String tabRet = CharMatcher.WHITESPACE.collapseFrom(tabString, '#');  
  4. System.out.println(tabRet); // #hello#world#you#are#here#  

5.3 去掉前后空白和缩成一个字符

[java]  view plain  copy
  1. // 在前面的基础上去掉字符串的前后空白,并将空白换成一个#  
  2. String trimRet = CharMatcher.WHITESPACE.trimAndCollapseFrom(tabString, '#');  
  3. System.out.println(trimRet);// hello#world#you#are#here  

5.4 保留数字

[java]  view plain  copy
  1. String letterAndNumber = "1234abcdABCD56789";  
  2. // 保留数字  
  3. String number = CharMatcher.JAVA_DIGIT.retainFrom(letterAndNumber);  
  4. System.out.println(number);// 123456789  

六、 断言工具类Preconditions   

[java]  view plain  copy
  1. // 检查是否为null,null将抛出异常IllegalArgumentException,且第二个参数为错误消息。  
  2. trimRet = null;  
  3. //Preconditions.checkNotNull(trimRet, "label can not be null");  
  4. int data = 10;  
  5. Preconditions.checkArgument(data < 100"data must be less than 100");  

七、对象工具类 Objects

7.1 Objects的toStringHelper和hashCode方法

[java]  view plain  copy
  1. // Book用Objects的相关方法简化toString(),hashCode()的实现。  
  2. // 用ComparisonChain简化compareTo()(Comparable接口)方法的实现。  
  3. Book book1 = new Book();  
  4. book1.setAuthor("Tom");  
  5. book1.setTitle("Children King");  
  6. book1.setIsbn("11341332443");  
  7. System.out.println(book1);  
  8. System.out.println(book1.hashCode());  
  9.   
  10. Book book2 = new Book();  
  11. book2.setAuthor("Amy");  
  12. book2.setTitle("Children King");  
  13. book2.setIsbn("111");  
  14. System.out.println(book2);  
  15. System.out.println(book2.hashCode());  
  16.   
  17. System.out.println(book1.compareTo(book2));  

结果为:

Book{author=Tom, title=Children King, isbn=11341332443, price=0.0}
268414056
Book{author=Amy, title=Children King, isbn=111, price=0.0}
-1726402621
1

7.2 Objects的firstNonNull方法

[java]  view plain  copy
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值