日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Guava 实用操作集合

發(fā)布時間:2025/3/12 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Guava 实用操作集合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
guava 是 google 幾個java核心類庫的集合,包括集合、緩存、原生類型、并發(fā)、常用注解、基本字符串操作和I/O等等。?
???
?? 大家平時經(jīng)常遇到某些相同的問題,自己寫代碼也都能解決。但是久而久之會感覺到很痛苦,因為我們一而再,再而三的重復(fù)發(fā)明輪子。為了不再忍受痛苦,也許我們可以總結(jié)自己的類庫,但是新的問題來了。自己總結(jié)的類庫很難與大家分享,不能幫助到更多人。同時自己的類庫要不斷的進行維護。guava 正是出于這樣的目的而來的。?

?? 只說不練不行啊,讓我們舉上一兩個例子?
判斷 String不為null,且不為空 ?
Java代碼??
  • String?str=...;??
  • //use?java??
  • if(str?!=null?&&?!str.isEmpty()){??
  • ????//do?something??
  • }??
  • ??
  • ??
  • //use?guava??
  • if(!Strings.isNullOrEmpty(str)){??
  • ????//do?something??
  • }??

  • 上而的例子還不是很給力,讓我們舉一個更給力的例子。 復(fù)制文件 ?
    Java代碼??
  • File?from=...;??
  • File?to=...;??
  • ??
  • //use?java??
  • FileInputStream?in=new?FileInputStream(from);??
  • FileOutputStream?out=new?FileOutputStream(to);??
  • byte[]?buff=new?byte[1024];??
  • int?readLength=-1;??
  • while((readLength?=?in.read(buff))?>?0){??
  • ????out.write(buff,?0,?readLength);??
  • }??
  • in.close();??
  • out.close();??
  • ??
  • //use?guava??
  • Files.copy(from,to);?//注意,只用了一行代碼噢??


  • ??? 通過上面的例子,已經(jīng)能感覺到guava的強大。接下來,讓我們更深入看看guava的其他功能。 guava(r09-api) 分為這幾個包?
    • base????????????? 基本的工具類與接口
    • io???????????????? io流相關(guān)的工具類與方法
    • net?????????????? 網(wǎng)絡(luò)地址相關(guān)的工具類與方法
    • primitives??????? 原始類型的工具類
    • collect?????????? 通用集合接口與實現(xiàn),與其集合相關(guān)工具類
    • util.concurrent?并發(fā)相關(guān)工具類


    base包 ?

    字符串相關(guān)工具類 ?
    Strings ?
    Java代碼??
  • public?class?StringsTest?{??
  • ????@Test??
  • ????public?void?test()?{??
  • ????????//將空字符串轉(zhuǎn)換為null??
  • ????????Assert.assertEquals(null,?Strings.emptyToNull(""));??
  • ????????//將null轉(zhuǎn)換為空字符串??
  • ????????Assert.assertEquals("",?Strings.nullToEmpty(null));??
  • ????????//判斷字符串為null或者為空??
  • ????????Assert.assertTrue(Strings.isNullOrEmpty("")?&&?Strings.isNullOrEmpty(null));??
  • ????????//將字符串重復(fù)??
  • ????????Assert.assertEquals("javajavajava",?Strings.repeat("java",?3));??
  • ????}??
  • }??


  • CharMatcher ?
    Java代碼??
  • public?class?CharMatcherTest?{??
  • ????@Test??
  • ????public?void?test()?{??
  • ????????String?source?=?"a1b2c3";??
  • ????????CharMatcher?matcher?=?CharMatcher.DIGIT;?//預(yù)定義的?DIGIT?類型??
  • ????????Assert.assertTrue(mathcer.match('8'));??
  • ????????Assert.assertEquals("123",?matcher.retainFrom(source));??
  • ????????Assert.assertEquals(3,?matcher.countIn(source));??
  • ????????Assert.assertEquals("abc",?matcher.removeFrom(source));??
  • ????????Assert.assertEquals("a2b3c",?matcher.trimFrom("1a2b3c4"));??
  • ????}??
  • }??

  • Jioner ?
    Java代碼??
  • public?class?JoinerTest?{??
  • ????@Test??
  • ????public?void?test()?{??
  • ????????Assert.assertEquals("2011-08-04",?Joiner.on("-").join("2011",?"08",?"04"));??
  • ????}??
  • }??


  • Splitter ?
    Java代碼??
  • public?class?SplitterTest?{??
  • ????@Test??
  • ????public?void?test()?{??
  • ????????Splitter.on(',').split("a,b");?//結(jié)果返回Iterable<String>,包含?"a"?and?"b"??
  • ????????//將結(jié)果中的元素trim??
  • ????????//結(jié)果依然包含??"a"?和?"b"?,而不是?"a?"?和?"?b"??
  • ????????Splitter.on(',').trimResults().split("a?,?b");???
  • ????????//忽略空字符串??
  • ????????//結(jié)果必須是"a"?和?"b",而不是?"a"?,""?和?"b"??
  • ????????Splitter.on(',').omitEmptyStrings().split("a,,b");???
  • ????}??
  • }??


  • CaseFormat ?
    Java代碼??
  • public?class?CaseFormatTest?{??
  • ??
  • ????@Test??
  • ????public?void?test()?throws?IOException?{??
  • ????????//?helloGuava?=>?HELLO_GUAVA??
  • ????????Assert.assertEquals("HELLO_GUAVA",?CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE,?"helloGuava"));??
  • ????????//?hello-guava?=>?HelloGuava??
  • ????????Assert.assertEquals("HelloGuava",?CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL,?"hello-guava"));??
  • ????}??
  • }??


  • 其他 ?
    Preconditions ?
    有些方法在執(zhí)行前,先要檢查傳入的參數(shù)是否正確,或者類的狀態(tài)是否正確。通常會這樣做 Java代碼??
  • if?(count?<=?0)?{??
  • ???????throw?new?IllegalArgumentException("must?be?positive:?"?+?count);??
  • }??

  • guava就可以這樣,達到相同的效果?
    Java代碼??
  • Preconditions.checkArgument(count?>?0,?"must?be?positive:?%s",?count);??


  • I/O包 ?
    ByteStreams 提供了針對字節(jié)流的工具方法?
    Java代碼??
  • InputStream?from=...;??
  • OutputStream?to=...;??
  • ByteStreams.copy(from,to);?//復(fù)制??


  • CharStreams 提供了針對字符流的工具方法?
    Java代碼??
  • Reader?from?=...;??
  • Writer?to?=...;??
  • CharStreams.copy(from,?to);?//復(fù)制??


  • Files 提供了針對文件的工具方法?
    Java代碼??
  • File?from=...;??
  • File?to=...;??
  • Files.copy(from,?to);?//復(fù)制??

  • Java代碼??
  • Files.deleteDirectoryContents(File?directory);?//刪除文件夾下的內(nèi)容(包括文件與子文件夾)??
  • Files.deleteRecursively(File?file);?//刪除文件或者文件夾??
  • Files.move(File?from,?File?to);?//移動文件??


  • Resources 提供了針對classpath下資源操作的工具方法?
    Java代碼??
  • URL?url?=?Resources.getResource("config.xml");?//獲取classpath根下的config.xml文件url??
  • 總結(jié)

    以上是生活随笔為你收集整理的Guava 实用操作集合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。