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. //use guava
  7. if(!Strings.isNullOrEmpty(str)){
  8. //do something
  9. }

上而的例子还不是很给力,让我们举一个更给力的例子。复制文件

Java代码  

  1. File from=...;
  2. File to=...;
  3. //use java
  4. FileInputStream in=new FileInputStream(from);
  5. FileOutputStream out=new FileOutputStream(to);
  6. byte[] buff=new byte[1024];
  7. int readLength=-1;
  8. while((readLength = in.read(buff)) > 0){
  9. out.write(buff, 0, readLength);
  10. }
  11. in.close();
  12. out.close();
  13. //use guava
  14. 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. @Test
  3. public void test() throws IOException {
  4. // helloGuava => HELLO_GUAVA
  5. Assert.assertEquals("HELLO_GUAVA", CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "helloGuava"));
  6. // hello-guava => HelloGuava
  7. Assert.assertEquals("HelloGuava", CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, "hello-guava"));
  8. }
  9. }

其他

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
时间: 2024-10-11 03:28:05

Guava 实用操作集合的相关文章

mysql模块简单实用操作-----nodejs

1 //mysql模块简单实用操作 2 3 var mysql = require('mysql'); 4 5 mc = {}; 6 7 8 var dbconfig = { 9 host : 'xxxxxxxxxx', 10 user : 'xxx', 11 password : 'xxx', 12 database : 'xxxxx' 13 }; 14 15 16 17 mc.sqlExc = function (sql, next) { 18 var db = mysql.createCo

Eclipse - Eclipse实用插件集合

提高代码质量的插件 1. FindBugs FindBugs可以帮你找到Java代码中的bug,并给出解决方案提示. 2. Checkstyle Checkstyle插件可以集成到Eclipse IDE中去,能确保Java代码遵循标准代码样式. 3. PMD PMD是一款代码分析器,用来检测变量和写得不好的代码. 依赖管理 1. m2e-android m2e-android 集成了ADT.maven-android.m2eclipse,用于Android应用开发. 2. m2eclipse m

使用增强for循环遍历集合的时候操作集合的问题?

1 // 遍历一个list 2 public static void printList(List<String> list){ 3 for (String string : list) { 4 list.add("eeee"); // 运行错误 5 System.out.println(string); 6 } 7 System.out.println("遍历中: "+list); 8 } 9 异常信息如下: 10 Exception in threa

[VisualStudio]_[VS实用插件集合*持续更新]

场景: 1. 有些插件对提高效率是必要和必需的. 吐槽下:微软的程序员如何解决以下问题的?不用插件. 1. 快速打开文件,文件多之后VS只能通过鼠标点击 "解决方案资源管理器" 来双击打开文件,效率很低.这个插件可以通过快捷键CTRL+K,CTRL+O来打开指定的文件,支持文件名模糊匹配. 下载地址:  http://visualstudiogallery.msdn.microsoft.com/3eb2f230-2728-4d5f-b448-4c0b64154da7 vs2012的没试

提高开发效率的 Eclipse 实用操作

工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分了你的神.而掌握了Eclipse的一些实用技巧,则可以大大提高开发效率. 1.丢掉鼠标吧之Eclipse快捷键篇 1.1文件切换的三种方式 1.1.1  Ctrl + E,在右边显示出当前打开的所有文件 1.1.2 Ctrl + Pg Up ,Ctrl + Pg Dn ,逐个文件跳跃 按下Ctrl

跟王老师学集合(十):操作集合的工具类:Collections

操作集合的工具类:Collections 主讲人:王少华  QQ群号:483773664 Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合元素实现同步控制等方法. 一.排序操作 (一).方法 Collections提供了如下几个方法用于对List集合元素进行排序 static void reverse(List list):反转指定List集合中元素的顺序 static void shu

python基础10 字符串操作,字典操作,集合操作

本节内容: 字符串操作 字典操作 集合操作 字符串操作 概述 字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等.请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符. 如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" "括起来表示: "I'm OK" 类似的,如果字符串包含",我们就可以用'

KiCAD实用操作

KiCAD实用操作之一:自动编辑线宽 今天偶然间发现的一个比较实用的功能,算是KiCAD的一个优点吧(或许是在AD上面没发现):当整个PCB布完线或者在布线过程中,我们有可能需要对某个线的宽度进行调整,尤其对于KiCAD来说,因为没有给SMD焊盘补泪滴的功能,所以需要对某些信号的部分走线稍微加粗,以增加可靠性,这时候如果去一个一个的双击,打开编辑器,输入线宽,或者选择好线宽后重新拉线,就会比较麻烦,进度也比较慢,如果按照下面的方法进行,则可以简化很多步骤,比较方便快捷. 首先,打开首选项,在PC

Collections工具类:操作集合的工具类

Collections工具类:操作集合的工具类 Java提供了一个操作Set List Map等集合的工具类:Collections,该工具类提供了大量方法对集合元素进行排序.查询和修改等操作.还提供了将集合对象设置为不可变,对集合对象实现同步控制等方法. 排序操作 ArrayList arrayList = new ArrayList(); arrayList.add(2); arrayList.add(-1); arrayList.add(4); arrayList.add(6); Syst