<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>

          分享安利 | 安利一個(gè)java開(kāi)發(fā)利器……

          共 5910字,需瀏覽 12分鐘

           ·

          2021-05-02 10:21

          前言

          工欲善其事必先利其器,一個(gè)好的工具讓你花更少的時(shí)間,干更多的活,一定程度上比較高效地解放了你的生產(chǎn)力,讓你可以有更多的時(shí)間搞事情(摸魚(yú)、劃水呀),作為java后端開(kāi)發(fā)人員,guava對(duì)我們而言,就是這樣的工具,今天我們就來(lái)了解下這把利器。

          guava

          guava是什么

          GuavaGoogle提供的一組核心Java庫(kù),包括新的集合類(lèi)型(如multimapmultiset)、不可變集合、圖形庫(kù)以及用于并發(fā)、I/O、哈希、緩存、原語(yǔ)、字符串等的實(shí)用程序!它廣泛應(yīng)用于Google內(nèi)部的大多數(shù)Java項(xiàng)目,也被許多其他公司廣泛使用。

          guava的應(yīng)用

          既然是工具,那我們關(guān)注的就是它的用法,接下來(lái)我們就分別從集合、圖形、I/O、哈希、緩存、原語(yǔ)、字符串等方面,分享一些guava的常見(jiàn)應(yīng)用,讓他真正能夠解放你的生產(chǎn)力,今天主要介紹collect包下的內(nèi)容,其他內(nèi)容,感興趣的小伙伴自己去研究

          首先在我們的項(xiàng)目中,添加guava的依賴(lài):

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

          如果是android,換下依賴(lài)的版本即可。

          集合(Lists)

          包路徑:com.google.common.collect.Lists

          創(chuàng)建和添加對(duì)象

          正常情況下,我們?cè)?code style="overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">java中創(chuàng)建和使用List的時(shí)候,基本都是這樣的:

          // 創(chuàng)建集合
          List<String> stringList1 = new ArrayList<>();
          // 添加對(duì)象
          stringList1.add("hello");
          stringList1.add("world");

          但是,如果你用了guava,那上面這些你都可以一步到位:

          List<String> stringList2 = Lists.newArrayList("hello""world");

          還支持直接傳入數(shù)組:

          String[] strings = new String[] {"1231""23432423"};
          ArrayList<String> strings1 = Lists.newArrayList(strings);

          list分割

          更強(qiáng)大的是,它還支持List分割,我們?cè)谌粘i_(kāi)發(fā)中經(jīng)常有這樣的需求,比如某個(gè)接口或方法限制了List數(shù)據(jù)量大小(比如list的大小不能超過(guò)200),這時(shí)候你如果自己手動(dòng)寫(xiě)一個(gè)分割工具類(lèi)就很麻煩,但如果用guava,那就很簡(jiǎn)單:

          List<List<String>> partition = Lists.partition(stringList1, 200);

          上面代碼的作用就是把我們的stringList1分割成200一份的小list,這時(shí)候你再配合上forEach,需求就完美實(shí)現(xiàn)了。

          讓你的開(kāi)發(fā)過(guò)程更簡(jiǎn)單,更便捷,其他List的子類(lèi)創(chuàng)建類(lèi)似。

          list反轉(zhuǎn)

          實(shí)際開(kāi)發(fā)中,經(jīng)常要將list反轉(zhuǎn),比如1, 2, 3, 4list反轉(zhuǎn)成4, 3, 2, 1,自己寫(xiě)的話,需要寫(xiě)個(gè)for循環(huán),然后反向輸出到另一個(gè)List,但是用guava就賊簡(jiǎn)單:

          List<Integer> integerList = Lists.newArrayList(1234);
          // 反轉(zhuǎn)list
          List<Integer> reverse = Lists.reverse(integerList);

          list轉(zhuǎn)換

          比如我要將一個(gè)List<String>根據(jù)一定的條件轉(zhuǎn)換成一個(gè)List<Boolean>,我可以這樣操作:

          List<String> stringList2 = Lists.newArrayList("hello""world""");
          List<Boolean> transform = Lists.transform(stringList2, s -> !"".equals(s));

          我轉(zhuǎn)換的條件是只有不是空字符串就是true,這里s -> !"".equals(s)lamubda表達(dá)式的寫(xiě)法(最近一直在提這個(gè),這個(gè)現(xiàn)在確實(shí)已經(jīng)是主流了),展開(kāi)寫(xiě)確實(shí)占行數(shù):

          List<Boolean> transform2 = Lists.transform(stringList2, 
               new Function<String, Boolean>() {
                      @Override
                      public @Nullable Boolean apply(@Nullable String input) {
                          return !"".equals(input);
                      }
                  });

          其他更多方法,大家自己下載研究,上面這些已經(jīng)很可以了,滿足日常大部分需求,接下來(lái),我們?cè)賮?lái)看下Maps。

          Maps

          List類(lèi)似,Maps這個(gè)類(lèi)也提供了很多map相關(guān)的方法,下面我們就來(lái)看一下。

          創(chuàng)建map

          HashMap<Object, Object> objectObjectHashMap = Maps.newHashMap();
                  HashMap<Object, Object> objectObjectHashMap1 = Maps.newHashMap(objectObjectHashMap);

          比較兩個(gè)map

          這個(gè)方法就很強(qiáng)大,不僅可以返回兩個(gè)map的交集,還能返回每個(gè)map不同的地方,結(jié)果都是map

          HashMap<Object, Object> objectObjectHashMap = Maps.newHashMap();
                  objectObjectHashMap.put("k1""v1");
                  objectObjectHashMap.put("k2""v2");
                  objectObjectHashMap.put("k3""v3");

                  HashMap<Object, Object> objectObjectHashMap1 = Maps.newHashMap(objectObjectHashMap);
                  objectObjectHashMap.put("k4""v4");
                  objectObjectHashMap1.put("k5""v5");
          // 比較兩個(gè)map
                  MapDifference<Object, Object> difference = Maps.difference(objectObjectHashMap, objectObjectHashMap1);
          // 返回交集
                  Map<Object, Object> objectObjectMapCommon = difference.entriesInCommon();
          // 返回左側(cè)map特有的
                  Map<Object, Object> objectObjectMap1Left = difference.entriesOnlyOnLeft();
          // 返回右側(cè)map特有的
                  Map<Object, Object> objectObjectMap2Right = difference.entriesOnlyOnRight();
                  System.out.println(objectObjectMapCommon);
                  System.out.println(objectObjectMap1Left);
                  System.out.println(objectObjectMap2Right);

          將集合轉(zhuǎn)為Map

          這里還提供了將List等集合轉(zhuǎn)為map的方法:

          ImmutableMap<String, String> stringStringImmutableMap2 = Maps.toMap(stringList, s -> s);

          上面的代碼就是將一個(gè)list轉(zhuǎn)成keyvalue都一樣的map

          或者將map轉(zhuǎn)換為新的map:

                  ImmutableMap<Map.Entry<String, Object>, Boolean> entryBooleanImmutableMap = Maps.toMap(stringObjectImmutableMap.entrySet(), k -> "123123".equals(k));

          總結(jié)

          今天,我們分享了ListsMaps的很多常用的方法,并演示了常用的方法,還有很多內(nèi)容沒(méi)講到,一方面說(shuō)明它也不常用(我沒(méi)用到就是不常用),另外一方面,guava目前我只用到了集合下的一部分功能,所以目前就分享這么多。但是,guava用起來(lái)真的很方便,也確實(shí)解決了很多開(kāi)發(fā)中的問(wèn)題,提高了我們的開(kāi)發(fā)效率,至于其他的內(nèi)容,后期看情況。

          最后,我們先安利另外一款比較火的工具包——huTool,提供的方法也很豐富,因?yàn)槭菄?guó)人開(kāi)源的,所以很容易上手,這里我們先簡(jiǎn)單預(yù)告下,后期專(zhuān)門(mén)分享,工具包官方開(kāi)源地址:

          https://hutool.cn/

          好了,今天就到這里吧!

          - END -


          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  亚洲第一视频网 | 日韩一级 片中文字幕 | 人日本黄色 | 爱爱打炮网 | 92久久 |