Hello, Guava !

Guava(Google発のJavaライブラリ)については過去にも記事を書いていますが、今回は改めて社内勉強会のためにまとめ直しました。

おそらく最も基本で身近で使い出があると思われる、

  • com.google.common.base
  • com.google.common.collect
  • com.google.common.io

この3つのパッケージについて幾つかのクラス・メソッドをピックアップし、以下のスライドで紹介しています。また各パッケージの導入部に設定した課題については、JDKのみで書いた場合とGuavaを使って書いた場合のサンプルコードを用意しました。
(サンプルコードの方はPDFなのですが、埋め込みでは見づらそうなのでSlideShareからダウンロードして頂く方が良いかもしれません)

続きを読む Hello, Guava !

進化するJavaライブラリ、Guava

GoogleのJavaユーティリティライブラリであるGuavaは、今年9月28日にリリース10.0.0を迎えました。新たなAPIも追加され、更なる進化を遂げています。(執筆時点での最新リリースは10.0.1)

今回は、まだベータ版ながら新しく追加された興味深いAPIを4つ紹介します。
他のAPIについても、JavaDocなどで@Betaアノテーションがついているものはベータ版ですので、今後のリリースで変更される可能性があります。

Stopwatch

プログラムの実行時間を計測したいとき、よく使われるコードがあります。

long t1 = System.currentTimeMillis();

someExpensiveCompute();

long t2 = System.currentTimeMillis();
System.out.printf("time: %sms%n", t2 - t1);

このt1とかt2とかいう、よくわからない変数は何でしょう? それに時間を表示するために面倒な引き算をしていますね。Stopwatchを使うとこう書くことができます。

Stopwatch stopwatch = new Stopwatch().start();

someExpensiveCompute();

stopwatch.stop();
System.out.printf("time: %s%n", stopwatch);

続きを読む 進化するJavaライブラリ、Guava

Guavaのススメ

Guava: Google Core Libraries for Java 1.5+

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と似ています。が、あちらはジェネリクスを使わないので、ダサいキャストが必要になります。

このリスト変換の利点は、要素を使う時(リストから要素を取り出そうとした時)に初めて変換が行われるところにあります。 続きを読む Guavaのススメ