GS Collections Kata をひと通りやった

GS Collections というゴールドマン・サックスさんが出してる Java 用のコレクションライブラリがある。 Java Day Tokyo/JJUG CCC 2015 Spring で知ったのだが、これは以下のような利点を持っているようだ。

  • 使いやすいインターフェース
  • メモリ使用量が標準のコレクションよりもよい場合がある
  • Multimap や sortedbag などの標準にはないコレクション

GS Collections には GS Collections Kata という、チュートリアルがある。これは junit test case の形式をしていて IDE で読みこめばすぐに試せる。 順番に指示通りにやっていけば試せるんで、なかなか良い。 例も Company, Order, Supplier, LineItem など具体的で、わかりやすい。結構手間かかってるな、という印象。

で、ひと通り試した感想。

GS Collections API は、GS 社内で大量のデータを Java でオンメモリで扱う案件があるっていうバックグラウンドがあった上で実用を目指して作られているのかな、という印象を受けました。社内のライブラリなどがひと通り GS Collections 前提で書いてあると、それ自体がアドバンテージになる感じがします。

既存のコードと混ぜて一般的なウェブアプリケーションで利用するというイメージはわかない。コレクションライブラリをピンポイントで変えるのも結構微妙かな、と。また、メソッドの語彙選択が Smalltalk 由来らしく、Java 8 の Stream API とは違うので、慣れるまでちょっと戸惑いそう。

全般的には、GS Collections 使いやすくて、グループバイ的なことするのとかが Java 8 の Stream API だとまあごっちゃごちゃになるんで、そのへんは GS Collections 使った方が綺麗に書けそう。

Java 8 Stream API でロジックがゴッチャゴチャになったときには、GS Collections の利用を考慮しても良さそう。

大量のデータを取り扱うケース等では、これを利用すればメモリ使用量が節約できてよさそう。いざという時に、「あ、これ GS Collections でやったらメモリ使用量節約できるのでは??」と思い出せる状態にしておくと、よい気がします。

Web Application でも管理画面系等で、集計等を行う必要がある場合には便利かもしれない。ほら、こう、がんばって pivot table もどきを実装したりすることになることってあるじゃないですか。。

そんな感じで、Java エンジニアだったら、ひと通り GS Collections Kata やっておいて損はないんじゃないかな、といった感じでした。