Guavaライブラリ:その最も便利な機能や隠された機能は何ですか?[閉まっている]


131

私はのクイックスキャンがあったグァバAPIとそれが提供する新しいコレクション型を(MultimapそしてBiMapたとえば便利表示されます)と私は、プロジェクトの(S)I作業でライブラリを含むを考えています。

ただし、ライブラリに大きなメリットがなく、機能を学習することは貴重な時間を浪費する場合は、ライブラリを自由に含めることを躊躇します。

プロジェクトにGuavaライブラリーを含めましたか?予期しない方法でそれが役立つことがわかりましたか?将来も使用しますか?その主なメリット/時間の節約は何ですか?その隠された機能は何ですか?


4
タイトルと質問が実際には一致しません。
aioobe 2010

4
「新しいコレクションタイプ...便利だと思われます」と「ライブラリを含めることを控えめにしています...それらに大きなメリットがない場合」-それでそれはどれですか?ライブラリは有用であるが有益だと思うか、そうでないか
matt b

2017年(現在、質問はクローズされています)、最新のGradle(4.4.1)を使用している場合、デフォルトでguava 21.0が依存関係としてbuild.gradleに追加され、「この依存関係は内部で使用され、ユーザーには公開されません。独自のコンパイルクラスパス」で、Gradleチームがいくつかの本当に価値のあるものがあると判断したことを示唆しています。
マイクげっ歯類

回答:


158

真剣に、グアバのすべてが便利です。私はそれをかなり長い間使用してきましたが、手作業で行うよりもコードが少なくて済む新しい何かを常に発見しています。

他の人が私が本当に好きだと言っていないこと:

  • Multimapsは素晴らしいです。のようなものを使用するときはいつでもMap<Foo, Collection<Bar>>、代わりにマルチマップを使用して、キーにマップされた既存のコレクションを確認し、そこにない場合は作成して追加するという面倒なチェックを省いてください。
  • OrderingComparator思い通りの動作をするを構築するのに最適です。
  • Maps.uniqueIndexand Multimaps.index:これらのメソッドは、Iterableおよびを受け取り、それぞれに関数を適用した結果によっての値にインデックスを付けるFunctionan ImmutableMapまたはor ImmutableListMultimapを構築しますIterable。したがって、アイテムのIDを取得する関数を使用すると、1行のIDでアイテムのリストにインデックスを付けることができます。
  • それが提供する機能のもの... filtertransformなどのためのクラス使用の冗長性にもかかわらず、FunctionSとPredicateSを、私はこれが役に立つことがわかりました。ここでこれをうまく読むための1つの方法の例を示します
  • ComparisonChain小さな、見落とされがちなクラスです。複数の値を連続して比較し、最初の違いが見つかったときに返す必要がある比較メソッドを記述したい場合に便利です。面倒なことをすべて取り除き、チェーンされたメソッド呼び出しの数行だけにします。
  • Objects.equal(Object,Object) -nullセーフが等しい。
  • Objects.hashCode(Object...) -クラスの複数のフィールドに基づいてハッシュコードを取得する簡単な方法。
  • Objects.firstNonNull(Object,Object) -最初の値がnullの場合、特に最初の値がメソッド呼び出しの結果である場合、デフォルト値を取得するためのコードを削減します(これを通常の方法で行う前に変数に割り当てる必要があります)。
  • CharMatcherについてはすでに触れましたが、非常に強力です。
  • Throwablesあなたのようなスロー可能オブジェクトといくつかの素晴らしいものを、行うことができますThrowables.propagateそれはだ場合スロー可能オブジェクトを再スローされRuntimeExceptionたりErrorして、それをラップRuntimeExceptionし、それ以外のことをスローします。

私は確かに続けることができますが、私は仕事に行かなければなりません。=)とにかく、私の好きなものをここに挙げましたが、グアバのすべてがいくつかの状況で役立つというのが事実です。その多くは非常に頻繁に役立ちます。あなたがそれを使うにつれて、あなたはより多くの用途を発見するでしょう。それを使用しないと、片手が背中の後ろで結ばれるような感じになります。


2
完全に同意しComparisionChainます。
ウィスキーシエラ

44

私はグアバをGoogle内で数年間効果的に使用してきました-それは素晴らしいことです。

私が特に気に入っている部分は次のとおりです。

  • Charsets.* -とてもシンプルでとても便利
  • コレクション
  • IO処理(リソースを1行で完全に読み取るなど)
  • Splitter/Joiner
  • Preconditions

6
現在、Java 7以降ではStandardCharsetsを使用しています。Guavaの他の機能のうちいくつがJavaに取り入れられたのでしょうか。
DavidS 2016年

1
Guavaなどのサードパーティライブラリを含むレガシーAPIの使用を検出するこのModernizer Mavenプラグインを見つけました。設定ファイルは StandardCharsets含む67のグアバ非推奨を含んに表示されます。
DavidS

28

最初はコレクションの省略表現に使用していました。たとえば、次の代わりに:

Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();

あなたはこれを行うことができます:

Map<String, Map<Long, List<String>>> map = Maps.newHashMap();

また、マップを設定するのも簡単です。

ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");

今、私はグアバに存在する他のいくつかの有用なユーティリティを発見しました。たとえば、CharMatcherクラスを使用すると、文字のシーケンスを照合できます。できるよ:

CharMatcher.inRange('a','z').or(inRange('A','Z'));

または

String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");

21

CharMatcherのprecomputed()メソッド(sourceは、先日偶然見つけた素晴らしい「隠された機能」です。

これは実際には単なる最適化であり、ビット配列を使用してルックアップテーブルを作成し、文字を検索して「一致」するかどうかを確認するだけです。

これは、ライブラリを使用するときに活用できる隠された最適化の一種であり、独自のコードでは考えていなかったかもしれません。

もちろん、何度も使用する予定の複雑なCharMatcherを作成する場合は、次のようにprecomputed()メソッドを呼び出すことを忘れないでください。

CharMatcher complexMatcher = CharMatcher.anyOf("cat")
                                        .or(CharMatcher.DIGIT)
                                        .or(CharMatcher.WHITESPACE)
                                        .precomputed();

guava ListenableFutureについても質問があります。可能であれば、私の設計をレビューして、私の疑問のいくつかを明確にして、どのようにそれらを処理する必要があるかを教えてください。私は最近Guava ListenableFutureを使い始めましたが、とても気に入っていますが、それらを効率的に使用する方法について混乱しています。
ジョン2015年

16

ここだYouTubeの動画 Googleからの(スピーカー:ケビンBourrillion、GoogleのコアJavaライブラリのためのリードエンジニア)Googleのコレクションの美しさを示しています。Googleが素晴らしいことの1つを行ったことの1つは、コレクションの不変性を保証することです。


12

Google Guavaはユーティリティライブラリなので、その中にキラークラスがあるとは思えません。ユーティリティに関するすべてのことは、ほとんどすべてのプロジェクトでそれを使用することです。Javaコレクションを使用していない、これまでに行ったプロジェクトを思い出せません。そして、実際には、Google Guavaのコレクションユーティリティはすばらしいものであり、Java SDK自体にあるはずです。

私はGoogle Guavaのクラスについて3つの記事を書きました:

これだけではありません。グアバでできることは他にもたくさんあります。


8

絶対にとても便利です。ほとんどの場合、これは新しいプロジェクトに追加される最初のライブラリです。

  1. イテレータ/イテラブルと関数インターフェースが大好きです。
  2. インターフェースのサービスファミリーは優れた抽象概念です
  3. APIの種類であるImmutableXXXクラスを使用して、変更できないことを伝えるように取り組んできました。
  4. (MapMakerからの)マップの計算は、特定の状況では素晴らしいものです。

全体として、ライブラリは非常に高品質です。APIはよく考えられており、実装はしっかりしています。強くお勧めします。


7

MapMakerは、制限付きのLRUキャッシュを提供するようになりました。これは、小さなAPIの背後に隠されている重要な機構です。これは巨大なユーティリティの可能性があり、私はまだコードのすべてに取り掛かっています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.