ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

Scala で Array 等を制限に合わせて分割する

短く

grouped(size) を使いましょう

背景

ScalaAWS Kinesis へ PutRecords しようとしたときに、上限に引っ掛かりました。
で今回抵触した上限というのが、PutRecords 1 回あたりに含められるレコード数で、500 までとのこと。*1
なので 500 毎に分割して PutRecords したいわけだけど、分割…あるはずだよなーと探して見つかりました。

方法

(1 to 10000)
  .grouped(500) // これ
  .foreach(put)

たったこれだけです。
ただまぁ自前で作ると脳みその裏側でいろいろ考えたりするわけですよ。
そも動くようにするところから始まり、速度とか、オブジェクト生成の回数とか、いろんな Collections への対応とか。
あるなら使うがベストです。こんなの絶対にあるはずですし

おわりに

名前がよくない!(理不尽)
splitAt は違うしなぁとかで引っかかってました。
sliding まで行きついてコード書いた後に、あれよく見たら grouped あるやん、でやっとこさ到達しました。
Rust では chunk で、そうか chunk というワードがあったか、という感じ。検索のための語彙が増えました。