最近Scalaのコレクションクラスに「groupBy」というメソッドがあることを知り、ちょっと使ってみました。
使ってみて改めて画期的なメソッドだな~と感じたのでちょっと紹介いたします。
groupbyメソッドは引数に渡した関数の戻り値をキーにしたマップを作成するメソッドです。同じキーを返した値がマップの値になります。
例として売上げを商品毎にまとめてみます。
売上げは
というケースクラスで表現します。itemCodeが商品コードでnumberが売上げ数量という形になります。
このケースクラスを利用して
というソースを実行すると
と出力されます。商品コード毎のMapができています。
続いて、商品コード毎の売上数量の合計を求めるには
とします。countGroupの内容を出力すると
と出力されます。これを商品コードでソートするには
とします。
普段こういった集計処理(というほどでもないですが・・・)はSQLを利用することがほとんどだと思いますが、GAEのBigTableやKeyValueStoreのようなNoSQLなデータベース(ストレージ?)が普及してくるとプログラム内で集計処理をすることがどんどん増えてくると考えられます。
そういった中で、あらかじめこういったメソッドが用意されているなんて、ありがたいことだな~なんてちょと感動してしまいました。
最後にそれぞれの処理をまとめたプログラムを下記に記します。
0 件のコメント:
コメントを投稿