Javaで独自のIteratorを作成する
乱数を10個生成するイテレータを作成します。
イテレータはjava.util.Iteratorインタフェースをimplementする必要があります。
オーバーライドするメソッドは2つです。
- hasNext()
- next()
MyIteratorクラスを作成します。実装は以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package jp.co.confrage; import java.util.Iterator; public class MyIterator implements Iterator<Integer> { int size = 10; int cur = 0; @Override public boolean hasNext() { return cur != size; } @Override public Integer next() { cur++; return (int) (Math.random() * 1000); } } |
このイテレータを使用してループします。
1 2 3 4 5 6 7 8 9 10 11 12 |
package jp.co.confrage; import java.util.Iterator; public class MyIteratorSample { public static void main(String[] args) { final Iterator<Integer> itr = new MyIterator(); while (itr.hasNext()) { System.out.println(itr.next()); } } } |
結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
107 989 210 905 372 277 284 499 672 832 |
Streamでループ
Java8以降ならStreamを使用してループします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package jp.co.confrage; import java.util.Spliterator; import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; public class MyIteratorSample { public static void main(String[] args) { final MyIterator itr = new MyIterator(); final Spliterator<Integer> spliterator = Spliterators.spliteratorUnknownSize(itr, Spliterator.NONNULL); final Stream<Integer> stream = StreamSupport.stream(spliterator, true); stream.forEach(System.out::println); } } |
結果は乱数が10個標準出力されます。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級