SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

「Google Collections Library」でJavaのコレクションを補完する

Google発のコレクションライブラリの紹介

入手方法

 Google Collections Libraryは、http://code.google.com/p/google-collections/からダウンロードできます。本稿の執筆時点のバージョンは0.5です。実際、現時点でAPIの安定性について保証が得られていないので、APIに変更が生じる可能性があり、それによって本稿のサンプルが実態にそぐわなくなることも考えられます。しかし、生じる差異はわずかで、うまくすれば簡単に修正できるものと思われます。

 このライブラリをプロジェクトで実際に利用する手順は簡単で、ダウンロードしたアーカイブを解凍して、そこに含まれるjarファイルをインクルードするだけです。Javadocとソースファイルのアーカイブも提供されており、たいていの統合開発環境(IDE)では、ライブラリを定義するとき、それらがjarファイルに結び付けられます。これでライブラリをより簡単に使えるようになり、またプロジェクトのデバッグも容易になります。

簡単なサンプル

 まずは簡単な機能をいくつか見ていきましょう。簡単とは言っても、どれも私のお気に入りの機能です。最初に紹介するのは、「補助クリエータ」(Convenience Creators)です。

 前述のジェネリックスを用いた、何かをリストにマップする例をもう一度見てみましょう。

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

 これが多くの開発者にとって当たり前のスタイルなのではないでしょうか。実際、私はこれよりずっと複雑なコレクションの宣言や初期化の型シグニチャを書いてきました。必ずと言ってよいほど、その左辺と右辺の両方でこのシグニチャが繰り返されていました。

 Java 7に向けて提案されている型推論を適用すると、上の例は次のように書き換えられます。

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

 確かに改善が見られます。こう書いても、コンパイラは常識的な推論に基づきnew HashMapのジェネリック(総称的)な型シグニチャを組み立てるために必要な情報を引き出せるに違いありません。ですが、このスタイルが正式に採用されるかどうかは、もう少し様子を見る必要があるでしょう。

 しかし、当座はGoogle Collections Libraryの別の機能を利用すれば、この冗長性を回避できます。

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

 Maps.newHashMap()は、Google Collections Library内のMapsというユーティリティクラスで定義されている静的メソッドです。これはJavaにおけるジェネリックスの実装上の抜け穴を突いたもので、補助クリエータnewHashMapに型シグニチャを渡すことは実際には必要ないのです。Javaのすべての標準コレクションとGoogleの新しいコレクションのすべてについて、対応する同様の補助クリエータが用意されています。この単純なアイデアだけでコードの可読性がこれほど向上するとは驚きです。

 たとえば、

List<String> listOfStrings =
   new ArrayList<String>();

 は、次のように書き換えることができます。

List<String>
listOfStrings = Lists.newArrayList();

 コレクションと直接は関係ありませんが、Joinクラスのjoinメソッドも便利です。joinメソッドが用意されているPythonのようなスクリプト言語を使ったことがある人なら、すぐわかるはずです。array(配列)、collection(コレクション)、iterable、またはvarargs(可変長引数)によるリストから取り出したアイテムを結合したストリングを作ることができます。最初のパラメータは、結合対象の要素の間に置かれる区切り記号です。たとえば、サブディレクトリのコレクションからファイルのパスを作るには、次のようにします。

String[] subdirs = new String[] {"usr", "local", "lib"};
String directory = Join.join(PATH_SEPARATOR, subdirs);

 取り立てて説明するほど新しい機能ではありませんが、必要なのは多分このメソッドくらいなもので、実際、これを使うことでコードを自作する手間が省けます。

次のページ
新しいコレクション

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Dick Wall(Dick Wall)

Google社(カリフォルニア州マウンテンビュー)の技術者で、Javaテクノロジーの提唱者。Google Developer Programに所属。Java Posseポッドキャスト(http://javaposse.com)の共同司会者も務める。Java PosseではJava関連のニュースやインタビューを定期的に放送している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2397 2008/04/21 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー