GoogleのJavaユーティリティライブラリで、Apache Commons の Lang、Collectionsなどに替わる機能を提供してくれるものです。コンパクトながら、かゆいところに手が届く良質なAPIになっていると思います。
いくつかの機能を紹介します。
List<A>を基にしてList<B>を作るとします。
ライブラリを使わない場合はこんな感じになるでしょう。
List<B> blist = new ArrayList<B>(alist.size()); for (A a : alist) { blist.add(new B(a)); }
Guavaを使う場合は次のように書きます。
List<B> blist = Lists.transform(alist, new Function<A, B>(){ @Override public B apply(A a) { return new B(a); } });
おや? どこかで見たような・・・。そう、Commons CollectionsのListUtilsと似ています。が、あちらはジェネリクスを使わないので、ダサいキャストが必要になります。
このリスト変換の利点は、要素を使う時(リストから要素を取り出そうとした時)に初めて変換が行われるところにあります。
ちなみにキャメルケースとは、単語の頭文字を大文字にして結合した文字列の形式(someString)、スネークケースとは、単語間をアンダースコアで結合した文字列の形式(some_string)です。
例えばDBを扱うときに多いですね。Java内ではキャメルケース・DB内ではスネークケースを使ってる場合、変換が必要になることがありますが、自前で実装するのは結構大変で面倒です。こんな場面ではCaseFormatというenumを使います。
キャメルケースからスネークケースへの変換
String str = LOWER_CAMEL.to(LOWER_UNDERSCORE, "someString"); assert str == "some_string";
スネークケースからキャメルケースへの変換
String str = LOWER_UNDERSCORE.to(LOWER_CAMEL, "some_string"); assert str == "someString";
Joinerというクラスを使います。
List<String> list = Arrays.asList("aaa", "bbb", "ccc"); String str = Joiner.on(", ").join(list); assert str == "aaa, bbb, ccc";
セントラルリポジトリに登録されていますので、Mavenからの使用も可能です。
dependencyの記述は以下の通りです。(現時点での最新バージョンはr07)
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>r07</version> </dependency>