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