--- title: Java8でIteratorからStreamに変換する方法 tags: ["Java", "Java SE 8", "Stream"] categories: ["Programming", "Java", "java", "util", "stream"] date: 2014-12-20T16:15:33Z updated: 2014-12-20T16:15:33Z --- いつも忘れるのでメモ `Iterator`から`Spliterator`に変換するのがポイント。 ``` java Iterator iterator = ...; Stream stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false); ``` サイズが固定長の場合は[Spliterators#spliterator(Iterator iterator, long size, int characteristics)](https://docs.oracle.com/javase/jp/8/api/java/util/Spliterators.html#spliterator-java.util.Iterator-long-int-)を使う。 ちなみに`characteristics`(上記例では`ORDERED`)を指定するとストリームが最適化されるみたい。種類は[JavaDoc](https://docs.oracle.com/javase/jp/8/api/java/util/Spliterator.html#field.summary)参照。なんでEnumじゃないんだ `Iterable`の場合は、`spliterator()`メソッドで直接`Spliterator`に変換できるので、 ``` java Iterable iterable = ...; Stream stream = StreamSupport.stream(iterable.spliterator(), false); ``` でOK。