Java Collection How to - Create random Iterator








Question

We would like to know how to create random Iterator.

Answer

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/*ww w  .  ja v a 2s .  co m*/
public class Main {
  public static void main(final String[] args) {
    Map<String, String> items;

    items = new HashMap<String, String>();
    items.put("A", "1");
    items.put("B", "2");
    items.put("C", "3");

    display(new RandomIterator<String>(items.keySet().iterator()));
    display(new RandomIterator<String>(items.keySet().iterator()));
  }

  private static <T> void display(final Iterator<T> iterator) {
    while (iterator.hasNext()) {
      final T item;
      item = iterator.next();
      System.out.println(item);
    }
  }
}

class RandomIterator<T> implements Iterator<T> {
  private final Iterator<T> iterator;

  public RandomIterator(final Iterator<T> i) {
    final List<T> items;

    items = new ArrayList<T>();

    while (i.hasNext()) {
      final T item;

      item = i.next();
      items.add(item);
    }

    Collections.shuffle(items);
    iterator = items.iterator();
  }

  public boolean hasNext() {
    return (iterator.hasNext());
  }

  public T next() {
    return (iterator.next());
  }

  public void remove() {
    iterator.remove();
  }
}

The code above generates the following result.