Javaで独自のIteratorを作成する

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個標準出力されます。

コメント

タイトルとURLをコピーしました