Q:

Reset Iterator position to 0 in a nested while-loop

I am performing iteration on two lists.
// events and items are two lists.

Iterator<Event> eventIterator = events.iterator();
Iterator<EventItem> itemIterator = items.iterator();

while (eventIterator.hasNext()) {

    Event event = eventIterator.next();

    while (itemIterator.hasNext()) {

        EventItem item = itemIterator.next();

        if (event.getId().equals(item.getEventId())) {

            // CLAIMED
            itemIterator.remove();
        }
    }

    // PROBLEM IS HERE.

}

Problem:
I looped through itemIterator to the end, and also removed the items from itemIterator if an item gets claimed. But, when next iteration on eventIterator will run, itemIterator is already at its end. 
How can I reset itemIterator to position 0 without reinitiating it using items.iterator() because that will bring back items removed from itemIterator for next iteration.
One item from itemIterator can only be claimed by one event from eventIterator. So, it doesn't make sense for me to keep that item in iteration after it is claimed. Hence, I remove the item from itemIterator.
I am open to alternatives if they decrease the number of iterations than the traditional for-each loop.

A:

How can I reset itemIterator to position 0 without reinitiating it using items.iterator() because that will bring back items removed from itemIterator for next iteration.

No, it won't. itemIterator.remove() removes the item from the collection you got the iterator from, not just the iterator. If you get a new iterator from that collection, it won't have that item on it anymore; you removed it. From the JavaDoc:

Removes from the underlying collection the last element returned by this iterator (optional operation). This method can be called only once per call to next().

(my emphasis)
You can't reset an iterator; just get a new one, within the while.
Iterator<Event> eventIterator = events.iterator();

while (eventIterator.hasNext()) {
    Event event = eventIterator.next();

    Iterator<EventItem> itemIterator = items.iterator();
    while (itemIterator.hasNext()) {
        EventItem item = itemIterator.next();
        if (event.getId().equals(item.getEventId())) {
            // CLAIMED
            itemIterator.remove();
        }
    }

    // If you need to loop a second time for some reason:
    itemIterator = items.iterator();
    // ...
}

