public class GroupByIterator extends java.lang.Object implements GroupIterator, LastPositionFinder, LookaheadIterator
The GroupByIterator acts as a SequenceIterator, where successive calls of next() return the leading item of each group in turn. The current item of the iterator is therefore the leading item of the current group. To get access to all the members of the current group, the method iterateCurrentGroup() is used; this underpins the current-group() function in XSLT. The grouping key for the current group is available via the getCurrentGroupingKey() method.
Modifier and Type | Class and Description |
---|---|
static class |
GroupByIterator.ManualGroupByIterator |
Modifier and Type | Field and Description |
---|---|
protected boolean |
composite |
protected java.util.List<AtomicSequence> |
groupKeys |
protected java.util.List<java.util.List<Item>> |
groups |
protected Expression |
keyExpression |
Constructor and Description |
---|
GroupByIterator() |
GroupByIterator(SequenceIterator population,
Expression keyExpression,
XPathContext keyContext,
StringCollator collator,
boolean composite)
Create a GroupByIterator
|
Modifier and Type | Method and Description |
---|---|
java.util.List<Item> |
getCurrentGroup()
Get the contents of the current group as a java List
|
AtomicSequence |
getCurrentGroupingKey()
Get the value of the grouping key for the current group
|
int |
getLength()
Get the last position (that is, the number of groups)
|
ManualGroupIterator |
getSnapShot(XPathContext context)
Get a sequence which is a snapshot of this sequence at the current position
|
boolean |
hasNext()
Determine whether there are more items to come.
|
SequenceIterator |
iterateCurrentGroup()
Get an iterator over the items in the current group
|
Item |
next()
Get the next item in the sequence.
|
boolean |
supportsGetLength()
Ask whether this iterator supports use of the
LastPositionFinder.getLength() method. |
boolean |
supportsHasNext()
Ask whether the hasNext() method can be called.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close, discharge
protected Expression keyExpression
protected java.util.List<java.util.List<Item>> groups
protected java.util.List<AtomicSequence> groupKeys
protected boolean composite
public GroupByIterator(SequenceIterator population, Expression keyExpression, XPathContext keyContext, StringCollator collator, boolean composite) throws XPathException
population
- iterator over the population to be groupedkeyExpression
- the expression used to calculate the grouping keykeyContext
- dynamic context for calculating the grouping keycollator
- Collation to be used for comparing grouping keyscomposite
- true if grouping keys are to be treated as composite keysXPathException
- if an error occurspublic GroupByIterator()
public AtomicSequence getCurrentGroupingKey()
getCurrentGroupingKey
in interface GroupIterator
public SequenceIterator iterateCurrentGroup()
iterateCurrentGroup
in interface GroupIterator
public java.util.List<Item> getCurrentGroup()
public boolean supportsHasNext()
LookaheadIterator
supportsHasNext
in interface LookaheadIterator
LookaheadIterator.hasNext()
method is availablepublic boolean hasNext()
LookaheadIterator
This method must not be called unless the result of LookaheadIterator.supportsHasNext()
is true.
hasNext
in interface LookaheadIterator
public Item next()
SequenceIterator
next
in interface SequenceIterator
public boolean supportsGetLength()
LastPositionFinder
LastPositionFinder.getLength()
method. This
method should always be called before calling LastPositionFinder.getLength()
, because an iterator
that implements this interface may support use of LastPositionFinder.getLength()
in some situations
and not in otherssupportsGetLength
in interface LastPositionFinder
LastPositionFinder.getLength()
method can be called to determine the length
of the underlying sequence.public int getLength()
getLength
in interface LastPositionFinder
public ManualGroupIterator getSnapShot(XPathContext context)
GroupIterator
getSnapShot
in interface GroupIterator
context
- the XPath contextCopyright (c) 2004-2022 Saxonica Limited. All rights reserved.