web-dev-qa-db-ja.com

Guavaライブラリ:最も便利な機能や隠された機能は何ですか?

Guava API と、それが提供する新しいコレクションタイプ(MultimapBiMapが便利だと思われる)のクイックスキャンを行ったので、私が取り組んでいるプロジェクトのライブラリ。

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

プロジェクトにGuavaライブラリを含めましたか?また、予期しない方法で有用であることが証明されましたか?今後も常に使用しますか?その主な利点/時間の節約は何ですか?その隠された機能は何ですか?

130
NimChimpsky

Google内で数年間Guavaを効果的に使用していますが、それは素晴らしいことです。

私が特に好きな部分は:

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

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

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");
28
dogbane

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

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

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

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

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

これは YouTubeビデオ Googleからです(スピーカー:Kevin Bourrillion、GoogleのコアのリードエンジニアJavaライブラリ)。Googleコレクションの美しさを示しています。 guaranteeコレクションの不変性は素晴らしいと思います。

16
Buhake Sindi

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

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

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

12
nanda

絶対に非常に便利です。ほとんど常に、新しいプロジェクトに追加された最初のライブラリです。

  1. Iterators/IterablesとFunctionインターフェースが大好きです。
  2. サービスファミリのインターフェイスは優れた抽象化です
  3. APIタイプのImmutableXXXクラスを使用して、変更できないことを伝え始めました。
  4. (MapMakerからの)マップの計算は、特定の状況で素晴らしいです。

全体的に、ライブラリは非常に高品質です。 APIは十分に検討されており、実装は堅固です。強くお勧めします。

8
Darren Gilroy

MapMakerは、境界付きLRUキャッシュを提供するようになりました-これは、小さなAPIの背後に隠された実質的な機械です。これは非常に有用な可能性があり、私はまだコード全体に精通しています。

7