Javaプログラマは、Googleのグアバのプログラミングを使用することをお勧めします

  • DKは大丈夫、文字列が十分ではありません提供しましたか?

  • ジョイナー/スプリッタ

  • CharMatcher

  • INTS

  • 多重集合

  • 多重集合コード

  • 変更不可能

  • 守備のコピー

  • 不変

  • ImmutableMap

  • マルチマップ

  • Bhinap

  • テーブル

  • 関数

  • アサーション:述語

  • フィルタ

  • キャッシュが王様です

  • CacheLoaderを

  • 非同期コールバック

  • 概要

  •  
    JDKは大丈夫、文字列が十分ではありません提供しましたか?
    おそらく、友好的ではない、少なくとも私たちが心配する、あなたが持っている彼らがいないGoushuangを使用してみましょう!そのような文字列のオファーの分割方法として、栗、のために、私たちは空の文字列について、それを気にする必要があり、それの要素があります(私はそれの真ん中にある要素をトリミングする場合)はnull結果を返すことを検討する必要がありますが、唯一のフロントとリアトリムは、方法を提供します。
    さて、次のコード例を見て、あなたはこれらを心配する必要はありませんしましょうグアバ:


    ジョイナー/スプリッタ
    ジョイナーは、コネクタ、デバイダスプリッタで、一般的に我々は、Stringオブジェクトを生成するアプリケーションでの使用が処理された後、それを多重化することができ、静的な決勝としてそれらを定義します。提供されているApacheコモンズのStringUtilsを知るためには、静的メソッドです。さらに重要なことは、グアバは建具/スプリッタがはるかに高いのApacheよりも、十分にテストされたその安定性と効率で提供し、次の自分のテストを見つけることができます-私たちは、文字列が独自に生成することで何をしたくありませんでしたジョイナー/スプリッタ、どのように簡単、シンプル、なめらかなAPIをカスタマイズしました!使用代替用skipNulls()/ NULL要素:ジョイナーのために、一般的に用いられている方法は、NULL要素をスキップするためのスプリッタuseForNull(String)を、一般的に使用される方法は次のとおりtrimResults()/ omitEmptyStrings() 。注スプリットモード、文字列だけでなく、定期的に、分割固定長がある(とても甘い!)は
    実際には、建具/スプリッタに加えて、グアバの文字列マッチングがさらに提供される。CharMatcher
    CharMatcher
    CharMatcher、文字のマッチングをし、デカップリング、および使用するための豊富な提供へのアプローチ!

  • INTS

    グアバはあなたがいないことはない、と思う、延長サポートのバイト/ショートパンツ/ int型/ Iongs /フロート/ダブルス/文字数/ブールこれらの基本データ型を提供しています!

  •  

     

    変更不可能

    あなたは、JDKがまだ提供して変更不可能な欠陥を参照してください?実際には、UnsupportedOperationExceptionをスローし、収集およびソースコレクションCollections.unmodifiableXxxは、同じオブジェクトで返されますが、コレクションに変更を加えることができるAPIをオーバーライドしました。我々は不変ビュー(変更不可能なビュー)で、その結果、ソースコレクションを変更するということは、ああ、私の神を変更します!

    もちろん、グアバを使用せずに、そしてどのように我々は、上記の問題を回避するためにありますか?

  • Multimapは
    CAN-多く:Multimapは
    私たちの地図が利用できるJDKがキーと値を、一から一、その後、実際の開発で、(このような分類の下に書籍等)、複数のKEYのVALUEの場合は、明らかにあり私たちはしばしばこれを表現:地図<K、リスト>、少し肥大化したようです!何の問題、さらに多くの不幸な事を肥大化していない、我々はトラブルのビットから新しいLISTかどうかを決定するための鍵があるかどうかを判断する必要があります!このよう......、SOハードを削除するなどのトラバーサル、まだ来てもっと厄介なもの、
    Multimapはを
    ヒントの下で、利点は簡単で、私たちは繰り返し情報のジェネリックする必要はありませんので、グアバのコレクションはすべて、メソッドを作成しましたA。取得()/キー()/のkeySet()/値()/エントリー()/ asMap() ビューの収集方法は非常に便利です返します。マルチマップ実装クラスはありますArrayListMultimap / HashMultimap / LinkedHashMultimap / TreeMultimap / ImmutableMultimap / ...

  • 多重集合

    Multiset是什么,我想上面的图,你应该了解它的概念了。Multiset就是无序的,但是可以重复的集合,它就是游离在List/Set之间的“灰色地带”!(至于有序的,不允许重复的集合嘛,guava还没有提供,当然在未来应该会提供UniqueList,我猜的,哈哈)

    来看一个Multiset的示例:

  •  

    可不可以双向:BiMap
    JDK提供的MAP让我们可以find value by key,那么能不能通过find key by value呢,能不能KEY和VALUE都是唯一的呢。这是一个双向的概念,即forward+backward。在实际场景中有这样的需求吗?比如通过用户ID找到mail,也需要通过mail找回用户名。没有guava的时候,我们需要create forward map AND create backward map,and now just let guava do that for you.

     

    BiMap
    biMap / biMap.inverse() / biMap.inverse().inverse() 它们是什么关系呢?你可以稍微看一下BiMap的源码实现,实际上,当你创建BiMap的时候,在内部维护了2个map,一个forward map,一个backward map,并且设置了它们之间的关系。因此,biMap.inverse() != biMap ;biMap.inverse().inverse() == biMap


  • 可不可以多个KEY:Table
    我们知道数据库除了主键外,还提供了复合索引,而且实际中这样的多级关系查找也是比较多的,当然我们可以利用嵌套的Map来实现:Map<k1,Map<k2,v2>>。为了让我们的代码看起来不那么丑陋,guava为我们提供了Table。


  • Cache is king
    对于大多数互联网项目而言,缓存的重要性,不言而喻!如果我们的应用系统,并不想使用一些第三方缓存组件(如redis),我们仅仅想在本地有一个功能足够强大的缓存,很可惜JDK提供的那些SET/MAP还不行!


    CacheLoader
    首先,这是一个本地缓存,guava提供的cache是一个简洁、高效,易于维护的。为什么这么说呢?因为并没有一个单独的线程用于刷新 OR 清理cache,对于cache的操作,都是通过访问/读写带来的,也就是说在读写中完成缓存的刷新操作!其次,我们看到了,我们非常通俗的告诉cache,我们的缓存策略是什么,SO EASY!在如此简单的背后,是guava帮助我们做了很多事情,比如线程安全。
    让异步回调更加简单

  •  

    JDK中提供了Future/FutureTask/Callable来对异步回调进行支持,但是还是看上去挺复杂的,能不能更加简单呢?比如注册一个监听回调。

     

    异步回调
    我们可以通过guava对JDK提供的线程池进行装饰,让其具有异步回调监听功能,然后在设置监听器即可!

     

     

     

    Functions
    上面的代码是为了完成将List集合中的元素,先截取5个长度,然后转成大写。函数式编程的好处在于在集合遍历操作中提供自定义Function的操作,比如transform转换。我们再也不需要一遍遍的遍历集合,显著的简化了代码!

  •  

    filter
    需要注意的是Lists并没有提供filter方法,不过你可以使用Collections2.filter完成!
    check null and other:Optional、Preconditions
    在guava中,对于null的处理手段是快速失败,你可以看看guava的源码,很多方法的第一行就是:Preconditions.checkNotNull(elements);
    要知道null是模糊的概念,是成功呢,还是失败呢,还是别的什么含义呢?
     

     

发布了22 篇原创文章 · 获赞 10 · 访问量 3万+

おすすめ

転載: blog.csdn.net/hnhygkx/article/details/104689665