いつも忘れるのでメモ
Iterator
からSpliterator
に変換するのがポイント。
Iterator<T> iterator = ...;
Stream<T> stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false);
サイズが固定長の場合はSpliterators#spliterator(Iterator<? extends T> iterator, long size, int characteristics)を使う。
ちなみにcharacteristics
(上記例ではORDERED
)を指定するとストリームが最適化されるみたい。種類はJavaDoc参照。なんでEnumじゃないんだ
Iterable
の場合は、spliterator()
メソッドで直接Spliterator
に変換できるので、
Iterable<T> iterable = ...;
Stream<T> stream = StreamSupport.stream(iterable.spliterator(), false);
でOK。