いつも忘れるのでメモ
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。