Skip to content

guava

guava は google が提供している java 用の便利ライブラリ集。 Java 8 より昔からあるので、Java8 でコアに入った機能と重複している機能も多い。IntelliJ ならそういうものも警告してくれるので、警告がでたら素直に受け入れて JDK の メソッドを利用するのが良い。

guava の利用シーン自体は減っているが、そういった中でもまだまだ便利な機能も多いので、便利なものを紹介する。

Lists.partition

一つの List を複数の List に分割する。100 要素のリストを 10 要素のリスト10個に分割、とかできる。便利。

List<Integer> bigList = ...
List<List<Integer>> smallerLists = Lists.partition(bigList, 10);

なお、Apache commons collections 4 でも同様のことができます。 機能に差はないので、すでに依存に入ってるほうを利用する、ぐらいの気持ちでいいと思います。

List<Integer> bigList = ...
List<List<Integer>> smallerLists = ListUtils.partition(bigList, 10);

ref. http://stackoverflow.com/questions/2895342/java-how-can-i-split-an-arraylist-in-multiple-small-arraylists

コンテナインスタンスの作成

Sets.newHashSet("foo", "bar")

HashSet<String> strings = Sets.newHashSet("foo", "bar");

Arrays.asList(a, b, c) で List の構築が簡単にできますけれど、Set の構築が簡単にできるメソッドが Java 8 の時点では存在していません。 そこで、Set の構築には guava の便利メソッドを利用するのが一般的です。 HashSet のインスタンスを作成します。標準ライブラリには相当するものが無いので、 guava を利用すると便利です。

JDK9 では Set.of でできるようになります。

ref. http://jyukutyo.hatenablog.com/entry/2016/01/04/182402

オンメモリキャッシュ

オンメモリキャッシュは Caffeine を利用したほうが良いでしょう。

CaseFormat の変換

CamelCaselower_case に変換したい時には CaseFormat を利用できます。

FormatExample
LOWER_CAMELlowerCamel
LOWER_HYPHENlower-hyphen
LOWER_UNDERSCORElower_underscore
UPPER_CAMELUpperCamel
UPPER_UNDERSCOREUPPER_UNDERSCORE

以下のように利用できます。

java
CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "CONSTANT_NAME")); // returns "constantName"

FAQ

apache commons と guava

両方とも言語コアの機能の足りないところを補うことを目標に開発されたライブラリなので機能がわりとかぶっています。

大差ないし、なんかいろいろと maven で依存入れてると両方とも依存に入ってきがち。 お好みで使い分ければよろしい。

guava とバージョニング

guava はあまり下位バージョンとの互換性を重視していないため、バージョン間でバイナリ互換性が保たれていない時があります。

バージョンアップ時はご注意ください。