JavaScript.2013-12-08「それ、Guavaでできるよ」系の話java「Javaってこれがめんどうだよねー」「あ、それGuavaでマシになりますよ」というやりとりが多い気がするので代表例をいくつか書いてみる。気になった方は公式ドキュメントをぜひ。便利系Map2キー使って1要素を特定するMap複数の値を持ちうるMap完全に同じ挙動というわけではない点に注意。キーでだけでなく値でも検索できるMapMapの実装を作るのが面倒ForwardingMapのサブクラスを作る......というのも良いが、そもそもMapをなぜ実装しなければならないかを確認したほうが良い。突っ込むキーや値を制限したいならMapConstraintsを使う。キャッシュのために特殊なMapを作りたいなら、MapMakerやcacheパッケージを見てみる。コレクションをいい感じにゴニョゴニョFluentIterableとIteratorsとIterablesをひととおり見ておく。ついでに、UnmodifiableIteratorとPeekingIteratorも知っておくと良いです。Unmodifiableで始まるクラス群はメソッドの戻り値として積極的に使いたい。resourcesができてだいぶマシになったリソースハンドリングですが、何らかの理由でJava6以前を使っている場合は依然として面倒です。14からできたCloserもわりと便利そうです。複数のリソースを管理している場合は特に有効かと。便利系Stream何バイト読み込んだかカウントしてporgressを表示したい、ユーザがアップロードしたデータが大きすぎる場合は例外を投げたい、データをオンメモリで処理したいがOOMEは気にしたい、などWEBアプリ実装に置いてよくありそうなニーズをサクっと実装できます。CountingInputStreamCountingOutputStreamFileBackedOutputStreamResourcesとFilesもひと通り眺めておくと良いです。FutureよりCallbackがいいListenableFutureまわりを見てみると良いです。Serviceも場合によっては有効そうですが、使ったことがないのであまり語れません。