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