# Class TransformIterator<I,O>

java.lang.Object
org.apache.commons.collections4.iterators.TransformIterator<I,O>

Type Parameters:
  `I` - the type of the input to the function.
  `O` - the type of the result of the function.

All Implemented Interfaces:
  `Iterator<O>`

public class TransformIterator<I,O> extends Object implements Iterator<O>
Decorates an iterator such that each element returned is transformed.

Since:
  1.0

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TransformIterator()`
  Constructs a new `TransformIterator` that will not function until the `setIterator` and `setTransformer(Transformer)` methods are invoked.
  `TransformIterator(Iterator<? extends I> iterator)`
  Constructs a new `TransformIterator` that won't transform elements from the given iterator.
  `TransformIterator(Iterator<? extends I> iterator, Transformer<? super I,? extends O> transformer)`
  Constructs a new `TransformIterator` that will use the given iterator and transformer.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Iterator<? extends I>`
  `getIterator()`
  Gets the iterator this iterator is using.
  `Transformer<? super I,? extends O>`
  `getTransformer()`
  Gets the transformer this iterator is using.
  `boolean`
  `hasNext()`
  `O`
  `next()`
  Gets the next object from the iteration, transforming it using the current transformer.
  `void`
  `remove()`
  `void`
  `setIterator(Iterator<? extends I> iterator)`
  Sets the iterator for this iterator to use.
  `void`
  `setTransformer(Transformer<? super I,? extends O> transformer)`
  Sets the transformer this the iterator to use.
  `protected O`
  `transform(I source)`
  Transforms the given object using the transformer.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface java.util.Iterator

  `forEachRemaining`

- ## Constructor Details

  - ### TransformIterator

    public TransformIterator()
    Constructs a new `TransformIterator` that will not function until the `setIterator` and `setTransformer(Transformer)` methods are invoked.

  - ### TransformIterator

    public TransformIterator(Iterator<? extends I> iterator)
    Constructs a new `TransformIterator` that won't transform elements from the given iterator.
    Parameters:
      `iterator` - the iterator to use

  - ### TransformIterator

    public TransformIterator(Iterator<? extends I> iterator, Transformer<? super I,? extends O> transformer)
    Constructs a new `TransformIterator` that will use the given iterator and transformer. If the given transformer is null, then objects will not be transformed.
    Parameters:
      `iterator` - the iterator to use
      `transformer` - the transformer to use

- ## Method Details

  - ### getIterator

    public Iterator<? extends I> getIterator()
    Gets the iterator this iterator is using.
    Returns:
      the iterator.

  - ### getTransformer

    public Transformer<? super I,? extends O> getTransformer()
    Gets the transformer this iterator is using.
    Returns:
      the transformer.

  - ### hasNext

    public boolean hasNext()
    Specified by:
      `hasNext` in interface `Iterator<I>`

  - ### next

    public O next()
    Gets the next object from the iteration, transforming it using the current transformer. If the transformer is null, no transformation occurs and the object from the iterator is returned directly.
    Specified by:
      `next` in interface `Iterator<I>`
    Returns:
      the next object
    Throws:
      `NoSuchElementException` - if there are no more elements

  - ### remove

    public void remove()
    Specified by:
      `remove` in interface `Iterator<I>`

  - ### setIterator

    public void setIterator(Iterator<? extends I> iterator)
    Sets the iterator for this iterator to use. If iteration has started, this effectively resets the iterator.
    Parameters:
      `iterator` - the iterator to use

  - ### setTransformer

    public void setTransformer(Transformer<? super I,? extends O> transformer)
    Sets the transformer this the iterator to use. A null transformer is a no-op transformer.
    Parameters:
      `transformer` - the transformer to use

  - ### transform

    protected O transform(I source)
    Transforms the given object using the transformer. If the transformer is null, the original object is returned as-is.
    Parameters:
      `source` - the object to transform
    Returns:
      the transformed object