<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java必學的工具庫,讓你的代碼量減少90%

          共 5498字,需瀏覽 11分鐘

           ·

          2021-11-27 00:34

          來源:toutiao.com/
          i6943239541448917512



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

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

          1. Java自帶工具方法

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

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

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

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

          1.3 比較兩個對象是否相等

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

          Objects.equals(strA,?strB);

          源碼是這樣的

          public?static?boolean?equals(Object?a,?Object?b)?{
          ????return?(a?==?b)?||?(a?!=?null?&&?a.equals(b));
          }

          1.4 兩個List集合取交集

          List?list1?=?new?ArrayList<>();
          list1.add("a");
          list1.add("b");
          list1.add("c");
          List?list2?=?new?ArrayList<>();
          list2.add("a");
          list2.add("b");
          list2.add("d");
          list1.retainAll(list2);
          System.out.println(list1);?//?輸出[a,?b]

          推薦下自己做的 Spring Boot 的實戰(zhàn)項目:

          https://github.com/YunaiV/ruoyi-vue-pro

          2. apache commons工具類庫

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

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

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

          Maven依賴是:

          <dependency>
          ????<groupId>org.apache.commonsgroupId>
          ????<artifactId>commons-lang3artifactId>
          ????<version>3.12.0version>
          dependency>

          2.1.1 字符串判空

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

          public?static?boolean?isEmpty(final?CharSequence?cs)?{
          ????return?cs?==?null?||?cs.length()?==?0;
          }

          public?static?boolean?isNotEmpty(final?CharSequence?cs)?{
          ????return?!isEmpty(cs);
          }

          //?判空的時候,會去除字符串中的空白字符,比如空格、換行、制表符
          public?static?boolean?isBlank(final?CharSequence?cs)?{
          ????final?int?strLen?=?length(cs);
          ????if?(strLen?==?0)?{
          ????????return?true;
          ????}
          ????for?(int?i?=?0;?i?????????if?(!Character.isWhitespace(cs.charAt(i)))?{
          ????????????return?false;
          ????????}
          ????}
          ????return?true;
          }

          public?static?boolean?isNotBlank(final?CharSequence?cs)?{
          ????return?!isBlank(cs);
          }

          2.1.2 首字母轉(zhuǎn)成大寫

          String?str?=?"yideng";
          String?capitalize?=?StringUtils.capitalize(str);
          System.out.println(capitalize);?//?輸出Yideng

          2.1.3 重復拼接字符串

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

          2.1.4 格式化日期

          再也不用手寫SimpleDateFormat格式化了

          //?Date類型轉(zhuǎn)String類型
          String?date?=?DateFormatUtils.format(new?Date(),?"yyyy-MM-dd?HH:mm:ss");
          System.out.println(date);?//?輸出?2021-05-01?01:01:01

          //?String類型轉(zhuǎn)Date類型
          Date?date?=?DateUtils.parseDate("2021-05-01?01:01:01",?"yyyy-MM-dd?HH:mm:ss");

          //?計算一個小時后的日期
          Date?date?=?DateUtils.addHours(new?Date(),?1);

          2.1.5 包裝臨時對象

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

          //?返回兩個字段
          ImmutablePair?pair?=?ImmutablePair.of(1,?"yideng");
          System.out.println(pair.getLeft()?+?","?+?pair.getRight());?//?輸出?1,yideng
          //?返回三個字段
          ImmutableTriple?triple?=?ImmutableTriple.of(1,?"yideng",?new?Date());
          System.out.println(triple.getLeft()?+?","?+?triple.getMiddle()?+?","?+?triple.getRight());?//?輸出?1,yideng,Wed?Apr?07?23:30:00?CST?2021

          2.2 commons-collections 集合工具類

          Maven依賴是:

          <dependency>
          ????<groupId>org.apache.commonsgroupId>
          ????<artifactId>commons-collections4artifactId>
          ????<version>4.4version>
          dependency>

          2.2.1 集合判空

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

          public?static?boolean?isEmpty(final?Collection?coll)?{
          ????return?coll?==?null?||?coll.isEmpty();
          }

          public?static?boolean?isNotEmpty(final?Collection?coll)?{
          ????return?!isEmpty(coll);
          }
          //?兩個集合取交集
          Collection?collection?=?CollectionUtils.retainAll(listA,?listB);
          //?兩個集合取并集
          Collection?collection?=?CollectionUtils.union(listA,?listB);
          //?兩個集合取差集
          Collection?collection?=?CollectionUtils.subtract(listA,?listB);

          2.3 common-beanutils 操作對象

          Maven依賴:

          <dependency>
          ????<groupId>commons-beanutilsgroupId>
          ????<artifactId>commons-beanutilsartifactId>
          ????<version>1.9.4version>
          dependency>

          ????????public?class?User?{
          ????????private?Integer?id;
          ????????private?String?name;
          ????????}

          設置對象屬性

          User?user?=?new?User();
          BeanUtils.setProperty(user,?"id",?1);
          BeanUtils.setProperty(user,?"name",?"yideng");
          System.out.println(BeanUtils.getProperty(user,?"name"));?//?輸出?yideng
          System.out.println(user);?//?輸出?{"id":1,"name":"yideng"}

          對象和map互轉(zhuǎn)

          //?對象轉(zhuǎn)map
          Map?map?=?BeanUtils.describe(user);
          System.out.println(map);?//?輸出?{"id":"1","name":"yideng"}
          //?map轉(zhuǎn)對象
          User?newUser?=?new?User();
          BeanUtils.populate(newUser,?map);
          System.out.println(newUser);?//?輸出?{"id":1,"name":"yideng"}

          2.4 commons-io 文件流處理

          Maven依賴:

          <dependency>
          ????<groupId>commons-iogroupId>
          ????<artifactId>commons-ioartifactId>
          ????<version>2.8.0version>
          dependency>

          文件處理

          File?file?=?new?File("demo1.txt");
          //?讀取文件
          List?lines?=?FileUtils.readLines(file,?Charset.defaultCharset());
          //?寫入文件
          FileUtils.writeLines(new?File("demo2.txt"),?lines);
          //?復制文件
          FileUtils.copyFile(srcFile,?destFile);

          推薦下自己做的 Spring Cloud 的實戰(zhàn)項目:

          https://github.com/YunaiV/onemall

          3. Google Guava 工具類庫

          Maven依賴:

          <dependency>
          ????<groupId>com.google.guavagroupId>
          ????<artifactId>guavaartifactId>
          ????<version>30.1.1-jreversion>
          dependency>

          3.1 創(chuàng)建集合

          List?list?=?Lists.newArrayList();
          List?list?=?Lists.newArrayList(1,?2,?3);
          //?反轉(zhuǎn)list
          List?reverse?=?Lists.reverse(list);
          System.out.println(reverse);?//?輸出?[3,?2,?1]
          //?list集合元素太多,可以分成若干個集合,每個集合10個元素
          List>?partition?=?Lists.partition(list,?10);

          Map?map?=?Maps.newHashMap();
          Set?set?=?Sets.newHashSet();

          3.2 黑科技集合

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

          Multimap?map?=?ArrayListMultimap.create();
          map.put("key",?1);
          map.put("key",?2);
          Collection?values?=?map.get("key");
          System.out.println(map);?//?輸出?{"key":[1,2]}
          //?還能返回你以前使用的臃腫的Map
          Map>?collectionMap?=?map.asMap();

          多省事,多簡潔,省得你再創(chuàng)建 Map

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

          BiMap?biMap?=?HashBiMap.create();
          //?如果value重復,put方法會拋異常,除非用forcePut方法
          biMap.put("key","value");
          System.out.println(biMap);?//?輸出?{"key":"value"}
          //?既然value不能重復,何不實現(xiàn)個翻轉(zhuǎn)key/value的方法,已經(jīng)有了
          BiMap?inverse?=?biMap.inverse();
          System.out.println(inverse);?//?輸出?{"value":"key"}

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

          3.2.3 Table 一種有兩個key的HashMap

          //?一批用戶,同時按年齡和性別分組
          Table?table?=?HashBasedTable.create();
          table.put(18,?"男",?"yideng");
          table.put(18,?"女",?"Lily");
          System.out.println(table.get(18,?"男"));?//?輸出?yideng
          //?這其實是一個二維的Map,可以查看行數(shù)據(jù)
          Map?row?=?table.row(18);
          System.out.println(row);?//?輸出?{"男":"yideng","女":"Lily"}
          //?查看列數(shù)據(jù)
          Map?column?=?table.column("男");
          System.out.println(column);?//?輸出?{18:"yideng"}

          3.2.4 Multiset 一種用來計數(shù)的Set

          Multiset?multiset?=?HashMultiset.create();
          multiset.add("apple");
          multiset.add("apple");
          multiset.add("orange");
          System.out.println(multiset.count("apple"));?//?輸出?2
          //?查看去重的元素
          Set?set?=?multiset.elementSet();
          System.out.println(set);?//?輸出?["orange","apple"]
          //?還能查看沒有去重的元素
          Iterator?iterator?=?multiset.iterator();
          while?(iterator.hasNext())?{
          ????System.out.println(iterator.next());
          }
          //?還能手動設置某個元素出現(xiàn)的次數(shù)
          multiset.setCount("apple",?5);

          以上為個人經(jīng)驗,希望能給大家一個參考,如有錯誤或未考慮完全的地方,望不吝賜教。



          歡迎加入我的知識星球,一起探討架構(gòu),交流源碼。加入方式,長按下方二維碼噢

          已在知識星球更新源碼解析如下:

          最近更新《芋道 SpringBoot 2.X 入門》系列,已經(jīng) 101 余篇,覆蓋了?MyBatis、Redis、MongoDB、ES、分庫分表、讀寫分離、SpringMVC、Webflux、權(quán)限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能測試等等內(nèi)容。

          提供近 3W 行代碼的 SpringBoot 示例,以及超 4W 行代碼的電商微服務項目。

          獲取方式:點“在看”,關(guān)注公眾號并回復?666?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 63
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  激情色五月婷婷 | 日韩色视频在线观看 | 黄色视频网站在线看 | 就要日逼网 | 婷婷国产精品久久久 |