java.lang.Object
org.eclipse.persistence.jpa.jpql.tools.utility.iterable.CloneIterable<E>
org.eclipse.persistence.jpa.jpql.tools.utility.iterable.SnapshotCloneIterable<E>
Type Parameters:
E - the type of elements returned by the iterable's iterator
All Implemented Interfaces:
Iterable<E>

public class SnapshotCloneIterable<E> extends CloneIterable<E>
A SnapshotCloneIterable returns an iterator on a "snapshot" of a collection, allowing for concurrent access to the original collection. A copy of the collection is created when the iterable is constructed. As a result, the contents of the collection will be the same with every call to iterator().

The original collection passed to the SnapshotCloneIterable's constructor should be thread-safe (e.g. Vector); otherwise you run the risk of a corrupted collection.

By default, the iterator returned by a SnapshotCloneIterable does not support the Iterator.remove() operation; this is because it does not have access to the original collection. But if the SnapshotCloneIterable is supplied with a CloneIterator.Remover it will delegate the Iterator.remove() operation to the Remover. Alternatively, a subclass can override the iterable's CloneIterable.remove(Object) method.

This iterable is useful for multiple passes over a collection that should not be changed (e.g. by another thread) between passes.

See Also:
  • Constructor Details

    • SnapshotCloneIterable

      public SnapshotCloneIterable(Iterator<? extends E> iterator)
      Construct a "snapshot" iterable for the specified iterator. The Iterator.remove() operation will not be supported by the iterator returned by iterator() unless a subclass overrides the iterable's CloneIterable.remove(Object) method.
    • SnapshotCloneIterable

      public SnapshotCloneIterable(Iterator<? extends E> iterator, CloneIterator.Remover<E> remover)
      Construct a "snapshot" iterable for the specified iterator. The specified remover will be used by any generated iterators to remove objects from the original collection.
    • SnapshotCloneIterable

      public SnapshotCloneIterable(Collection<? extends E> collection)
      Construct a "snapshot" iterable for the specified collection. The Iterator.remove() operation will not be supported by the iterator returned by iterator() unless a subclass overrides the iterable's CloneIterable.remove(Object) method.
    • SnapshotCloneIterable

      public SnapshotCloneIterable(Collection<? extends E> collection, CloneIterator.Remover<E> remover)
      Construct a "snapshot" iterable for the specified collection. The specified remover will be used by any generated iterators to remove objects from the original collection.
  • Method Details