一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 代碼量減少90%,Java程序員必會的工具庫

代碼量減少90%,Java程序員必會的工具庫

2021-11-03 22:30Kirito的技術分享 Java教程

工作很多年后,才發現有很多工具類庫,可以大大簡化代碼量,提升開發效率,初級開發者卻不知道。

代碼量減少90%,Java程序員必會的工具庫

工作很多年后,才發現有很多工具類庫,可以大大簡化代碼量,提升開發效率,初級開發者卻不知道。而這些類庫早就成為了業界標準類庫,大公司的內部也都在使用,如果剛工作的時候就有人告訴我使用這些工具類庫,該多好!

一塊看一下有哪些工具類庫你也用過。

1. Java自帶工具方法

1.1 List集合拼接成以逗號分隔的字符串

  1. //如何把list集合拼接成以逗號分隔的字符串a,b,c
  2. Listlist=Arrays.asList("a","b","c");
  3. //第一種方法,可以用stream流
  4. Stringjoin=list.stream().collect(Collectors.joining(","));
  5. System.out.println(join);//輸出a,b,c
  6. //第二種方法,其實String也有join方法可以實現這個功能
  7. Stringjoin=String.join(",",list);
  8. System.out.println(join);//輸出a,b,c

1.2 比較兩個字符串是否相等,忽略大小寫

  1. if(strA.equalsIgnoreCase(strB)){
  2. System.out.println("相等");
  3. }

1.3 比較兩個對象是否相等

當我們用equals比較兩個對象是否相等的時候,還需要對左邊的對象進行判空,不然可能會報空指針異常,我們可以用java.util包下Objects封裝好的比較是否相等的方法

  1. Objects.equals(strA,strB);

源碼是這樣的

  1. publicstaticbooleanequals(Objecta,Objectb){
  2. return(a==b)||(a!=null&&a.equals(b));
  3. }

1.4 兩個List集合取交集

  1. Listlist1=newArrayList<>();
  2. list1.add("a");
  3. list1.add("b");
  4. list1.add("c");
  5. Listlist2=newArrayList<>();
  6. list2.add("a");
  7. list2.add("b");
  8. list2.add("d");
  9. list1.retainAll(list2);
  10. System.out.println(list1);//輸出[a,b]

2. apache commons工具類庫

apache commons是最強大的,也是使用最廣泛的工具類庫,里面的子庫非常多,下面介紹幾個最常用的

2.1 commons-lang,java.lang的增強版

建議使用commons-lang3,優化了一些api,原來的commons-lang已停止更新

Maven依賴是:

  1. org.apache.commons
  2. commons-lang3
  3. 3.12.0

2.1.1 字符串判空

傳參CharSequence類型是String、StringBuilder、StringBuffer的父類,都可以直接下面方法判空,以下是源碼:

  1. publicstaticbooleanisEmpty(finalCharSequencecs){
  2. returncs==null||cs.length()==0;
  3. }
  4. publicstaticbooleanisNotEmpty(finalCharSequencecs){
  5. return!isEmpty(cs);
  6. }
  7. //判空的時候,會去除字符串中的空白字符,比如空格、換行、制表符
  8. publicstaticbooleanisBlank(finalCharSequencecs){
  9. finalintstrLen=length(cs);
  10. if(strLen==0){
  11. returntrue;
  12. }
  13. for(inti=0;i
  14. if(!Character.isWhitespace(cs.charAt(i))){
  15. returnfalse;
  16. }
  17. }
  18. returntrue;
  19. }
  20. publicstaticbooleanisNotBlank(finalCharSequencecs){
  21. return!isBlank(cs);
  22. }

2.1.2 首字母轉成大寫

  1. Stringstr="yideng";
  2. Stringcapitalize=StringUtils.capitalize(str);
  3. System.out.println(capitalize);//輸出Yideng

2.1.3 重復拼接字符串

  1. Stringstr=StringUtils.repeat("ab",2);
  2. System.out.println(str);//輸出abab

2.1.4 格式化日期

再也不用手寫SimpleDateFormat格式化了

  1. //Date類型轉String類型
  2. Stringdate=DateFormatUtils.format(newDate(),"yyyy-MM-ddHH:mm:ss");
  3. System.out.println(date);//輸出2021-05-0101:01:01
  4. //String類型轉Date類型
  5. Datedate=DateUtils.parseDate("2021-05-0101:01:01","yyyy-MM-ddHH:mm:ss");
  6. //計算一個小時后的日期
  7. Datedate=DateUtils.addHours(newDate(),1);

2.1.5 包裝臨時對象

當一個方法需要返回兩個及以上字段時,我們一般會封裝成一個臨時對象返回,現在有了Pair和Triple就不需要了

  1. //返回兩個字段
  2. ImmutablePairpair=ImmutablePair.of(1,"yideng");
  3. System.out.println(pair.getLeft()+","+pair.getRight());//輸出1,yideng
  4. //返回三個字段
  5. ImmutableTripletriple=ImmutableTriple.of(1,"yideng",newDate());
  6. System.out.println(triple.getLeft()+","+triple.getMiddle()+","+triple.getRight());//輸出1,yideng,WedApr0723:30:00CST2021

2.2 commons-collections 集合工具類

Maven依賴是:

  1. org.apache.commons
  2. commons-collections4
  3. 4.4

2.2.1 集合判空

封裝了集合判空的方法,以下是源碼:

  1. publicstaticbooleanisEmpty(finalCollectioncoll){
  2. returncoll==null||coll.isEmpty();
  3. }
  4. publicstaticbooleanisNotEmpty(finalCollectioncoll){
  5. return!isEmpty(coll);
  6. }
  1. //兩個集合取交集
  2. Collectioncollection=CollectionUtils.retainAll(listA,listB);
  3. //兩個集合取并集
  4. Collectioncollection=CollectionUtils.union(listA,listB);
  5. //兩個集合取差集
  6. Collectioncollection=CollectionUtils.subtract(listA,listB);

2.3 common-beanutils 操作對象

Maven依賴:

  1. commons-beanutils
  2. commons-beanutils
  3. 1.9.4
  1. publicclassUser{
  2. privateIntegerid;
  3. privateStringname;
  4. }

設置對象屬性

  1. Useruser=newUser();
  2. BeanUtils.setProperty(user,"id",1);
  3. BeanUtils.setProperty(user,"name","yideng");
  4. System.out.println(BeanUtils.getProperty(user,"name"));//輸出yideng
  5. System.out.println(user);//輸出{"id":1,"name":"yideng"}

對象和map互轉

  1. //對象轉map
  2. Mapmap=BeanUtils.describe(user);
  3. System.out.println(map);//輸出{"id":"1","name":"yideng"}
  4. //map轉對象
  5. UsernewUser=newUser();
  6. BeanUtils.populate(newUser,map);
  7. System.out.println(newUser);//輸出{"id":1,"name":"yideng"}

2.4 commons-io 文件流處理

Maven依賴:

  1. commons-io
  2. commons-io
  3. 2.8.0

文件處理

  1. Filefile=newFile("demo1.txt");
  2. //讀取文件
  3. Listlines=FileUtils.readLines(file,Charset.defaultCharset());
  4. //寫入文件
  5. FileUtils.writeLines(newFile("demo2.txt"),lines);
  6. //復制文件
  7. FileUtils.copyFile(srcFile,destFile);

3. Google Guava 工具類庫

Maven依賴:

  1. com.google.guava
  2. guava
  3. 30.1.1-jre

3.1 創建集合

  1. Listlist=Lists.newArrayList();
  2. Listlist=Lists.newArrayList(1,2,3);
  3. //反轉list
  4. Listreverse=Lists.reverse(list);
  5. System.out.println(reverse);//輸出[3,2,1]
  6. //list集合元素太多,可以分成若干個集合,每個集合10個元素
  7. List>partition=Lists.partition(list,10);
  8. Mapmap=Maps.newHashMap();
  9. Setset=Sets.newHashSet();

3.2 黑科技集合

3.2.1 Multimap 一個key可以映射多個value的HashMap

  1. Multimapmap=ArrayListMultimap.create();
  2. map.put("key",1);
  3. map.put("key",2);
  4. Collectionvalues=map.get("key");
  5. System.out.println(map);//輸出{"key":[1,2]}
  6. //還能返回你以前使用的臃腫的Map
  7. Map>collectionMap=map.asMap();

多省事,多簡潔,省得你再創建 Map>

3.2.2 BiMap 一種連value也不能重復的HashMap

  1. BiMapbiMap=HashBiMap.create();
  2. //如果value重復,put方法會拋異常,除非用forcePut方法
  3. biMap.put("key","value");
  4. System.out.println(biMap);//輸出{"key":"value"}
  5. //既然value不能重復,何不實現個翻轉key/value的方法,已經有了
  6. BiMapinverse=biMap.inverse();
  7. System.out.println(inverse);//輸出{"value":"key"}

這其實是雙向映射,在某些場景還是很實用的。

3.2.3 Table 一種有兩個key的HashMap

  1. //一批用戶,同時按年齡和性別分組
  2. Tabletable=HashBasedTable.create();
  3. table.put(18,"男","yideng");
  4. table.put(18,"女","Lily");
  5. System.out.println(table.get(18,"男"));//輸出yideng
  6. //這其實是一個二維的Map,可以查看行數據
  7. Maprow=table.row(18);
  8. System.out.println(row);//輸出{"男":"yideng","女":"Lily"}
  9. //查看列數據
  10. Mapcolumn=table.column("男");
  11. System.out.println(column);//輸出{18:"yideng"}

3.2.4 Multiset 一種用來計數的Set

  1. Multisetmultiset=HashMultiset.create();
  2. multiset.add("apple");
  3. multiset.add("apple");
  4. multiset.add("orange");
  5. System.out.println(multiset.count("apple"));//輸出2
  6. //查看去重的元素
  7. Setset=multiset.elementSet();
  8. System.out.println(set);//輸出["orange","apple"]
  9. //還能查看沒有去重的元素
  10. Iteratoriterator=multiset.iterator();
  11. while(iterator.hasNext()){
  12. System.out.println(iterator.next());
  13. }
  14. //還能手動設置某個元素出現的次數
  15. multiset.setCount("apple",5);

原文鏈接:https://mp.weixin.qq.com/s?__biz=MzI0NzEyODIyOA==&mid=2247487671&idx=1&sn=201908d4e7142f4a74dc83317c2fa610&utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 9总探花新品牛仔背带裤 | 波多野结衣作品在线观看 | 视频大全在线观看网址 | 3d肉浦团在线观看 | 毛片在线网址 | 涩涩五月天 | 无人区在线观看免费视频国语 | 青柠网在线观看视频 | porono日本人xxx| 调教小荡娃h | 美女奶口隐私免费视频网站 | 息与子中文字幕bd | 日韩国产欧美精品综合二区 | 2015台湾永久免费平台 | 操儿子| 成年男女免费视频观看性 | 欧美日韩高清不卡一区二区三区 | 刺客女仆| 97午夜 | 好女孩韩剧免费观看 | 91啦中文在线观看 | 福利视频一区二区思瑞 | 国产播放啪视频免费视频 | 久久精品一区二区三区资源网 | 给我免费观看的视频在线播放 | 91极品国产 | 奇米9999| 欧美成人香蕉在线观看 | 特黄特黄一级片 | 我被黄总征服的全过程 | 免费抽搐一进一出印度 | 国产午夜不卡 | 日本高清中文字幕视频在线 | 女人国产香蕉久久精品 | 久久视频在线视频观看精品15 | 亚洲麻豆精品果冻传媒 | 色综合久久综合网欧美综合网 | 国产在线欧美日韩精品一区二区 | 国内视频一区二区三区 | 特级夫妻大片免费在线播放 | 日韩在线观看免费 |