IK.AM

@making's tech note


Java8でIteratorからStreamに変換する方法

🗃 {Programming/Java/java/util/stream}
🏷 Java 🏷 Java SE 8 🏷 Stream 
🗓 Updated at 2014-12-20T16:15:33Z  🗓 Created at 2014-12-20T16:15:33Z   🌎 English Page

いつも忘れるのでメモ

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。


✒️️ Edit  ⏰ History  🗑 Delete