Javaで独自のIteratorを作成する
乱数を10個生成するイテレータを作成します。
イテレータはjava.util.Iteratorインタフェースをimplementする必要があります。
オーバーライドするメソッドは2つです。
- hasNext()
- next()
MyIteratorクラスを作成します。実装は以下です。
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);
}
}
このイテレータを使用してループします。
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());
}
}
}
結果は以下のようになります。
107 989 210 905 372 277 284 499 672 832
Streamでループ
Java8以降ならStreamを使用してループします。
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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント