java.util.stream.Stream の分割
投稿日:
大量のデータを取得して順次処理をする処理を書くときに、Guava の
FluentIterable を便利に使っていたけれど、そもそも Iterable だと2度目の
iterator() を呼ぶことを想定していないのにウッカリ使ってしまうケースが
たまにあったのでこれらを Java 8 からできた Stream に置き換えようという
話が出た。
しかし Stream には Iterables#partition のように固定長に分割する機能がなく、
自分で実装する必要があった。
実装がこれ:
Spliterator の実装を初めてやったけれど、そんなに難しくないし便利かもしれない。
characteristics 周りの仕様と、そのビットフラグの操作には慣れてないので
もう少し別のやり方があるかもしれない。
ついでに上述した「大量のデータを取得して順次処理をする」ための、List とかで受け取って
1つの Stream に遅延結合するための処理はこれ:
このあたり、いずれ apach-commons とか guava が実装しそうなのでそんなに熱心に書こうと思わない。