## net.sf.saxon.expr
Class FilterIterator

    java.lang.Object
      net.sf.saxon.expr.FilterIterator

All Implemented Interfaces:
  SequenceIterator

Direct Known Subclasses:
  FilterIterator.Leading, FilterIterator.NonNumeric

public class FilterIterator
extends java.lang.Object
implements SequenceIterator

A FilterIterator filters an input sequence using a filter expression. Note that a FilterIterator is not used where the filter is a constant number (PositionFilter is used for this purpose instead), so this class does no optimizations for numeric predicates.

Nested Class Summary
`static class` `FilterIterator.Leading` Subclass to support the extension function saxon:leading, which terminates the iteration at the first item whose predicate is false
`static class` `FilterIterator.NonNumeric` Subclass to handle the common special case where it is statically known that the filter cannot return a numeric value

Field Summary
`protected SequenceIterator` `base`
`protected Expression` `filter`
`protected XPathContext` `filterContext`

Constructor Summary
`FilterIterator(SequenceIterator base, Expression filter, XPathContext context)` Constructor

Method Summary
`Item` `current()` Get the current value in the sequence (the one returned by the most recent call on next()).
`SequenceIterator` `getAnother()` Get another iterator to return the same nodes
`protected Item` `getNextMatchingItem()` Get the next node that matches the filter predicate if there is one, or null if not.
`protected boolean` `matches()` Determine whether the context item matches the filter predicate
`Item` `next()` Get the next item if there is one
`int` `position()` Get the current position.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### base

    protected SequenceIterator base

### filter

    protected Expression filter

### filterContext

    protected XPathContext filterContext

Constructor Detail

### FilterIterator

    public FilterIterator(SequenceIterator base,
                          Expression filter,
                          XPathContext context)

  Constructor

Parameters:
  `base` - An iteration of the items to be filtered
  `filter` - The expression defining the filter predicate
  `context` - The context in which the expression is being evaluated

Method Detail

### next

    public Item next()
              throws XPathException

  Get the next item if there is one

  Specified by:
    `next` in interface `SequenceIterator`
  Returns:
    the next item, or null if there are no more items.
  Throws:
    `XPathException` - if an error occurs retrieving the next item

### getNextMatchingItem

    protected Item getNextMatchingItem()
                                throws XPathException

  Get the next node that matches the filter predicate if there is one, or null if not.

  Throws:
    `XPathException`

### matches

    protected boolean matches()
                       throws XPathException

  Determine whether the context item matches the filter predicate

  Throws:
    `XPathException`

### current

    public Item current()

  Description copied from interface: `SequenceIterator`
  Get the current value in the sequence (the one returned by the most recent call on next()). This will be null before the first call of next().

  Specified by:
    `current` in interface `SequenceIterator`
  Returns:
    the current item, the one most recently returned by a call on next(); or null, if next() has not been called, or if the end of the sequence has been reached.

### position

    public int position()

  Description copied from interface: `SequenceIterator`
  Get the current position. This will be zero before the first call on next(), otherwise it will be the number of times that next() has been called.

  Specified by:
    `position` in interface `SequenceIterator`
  Returns:
    the current position, the position of the item returned by the most recent call of next()

### getAnother

    public SequenceIterator getAnother()
                                throws XPathException

  Get another iterator to return the same nodes

  Specified by:
    `getAnother` in interface `SequenceIterator`
  Returns:
    a SequenceIterator that iterates over the same items, positioned before the first item
  Throws:
    `XPathException` - if any error occurs