Class XdmStream<T extends XdmItem>
- java.lang.Object
- 
- net.sf.saxon.s9api.streams.XdmStream<T>
 
- 
- Type Parameters:
- T- The type of items delivered by the stream.
 - All Implemented Interfaces:
- java.lang.AutoCloseable,- java.util.stream.BaseStream<T,java.util.stream.Stream<T>>,- java.util.stream.Stream<T>
 
 public class XdmStream<T extends XdmItem> extends java.lang.Object implements java.util.stream.Stream<T>XdmStreamextends the capabilities of the standard JDKStreamclass.The extensions are: - Additional terminal operations are provided, allowing the results of the
           stream to be delivered for example as a List<XdmNode>or anOptional<XdmNode>more conveniently than using the general-purposeCollectorinterface.
- Many of these terminal operations are short-circuiting, that is, they stop processing input when no further input is required.
- The additional terminal operations throw a checked exception if a dynamic error occurs while generating the content of the stream.
 The implementation is customized to streams of XdmItems.Note: This class is implemented by wrapping a base stream. Generally, the methods on this class delegate to the base stream; those methods that return a stream wrap the stream returned by the base class. The context object can be used by a terminal method on the XdmStream to signal to the originator of the stream that no further input is required. 
- 
- 
Constructor SummaryConstructors Constructor Description XdmStream(java.util.Optional<T> input)Create anXdmStreamconsisting of zero or one items, supplied in the form of anOptional<XdmItem>XdmStream(java.util.stream.Stream<T> base)Create anXdmStreamfrom a generalStreamthat returns XDM items.
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanallMatch(java.util.function.Predicate<? super T> predicate)Returns true if every item in the stream matches a supplied predicatebooleananyMatch(java.util.function.Predicate<? super T> predicate)Returns true if any item in the stream matches a supplied predicateXdmAtomicValueasAtomic()Return the result of the stream as anXdmAtomicValue.java.util.List<T>asList()Return the contents of the stream as aList<XdmItem>.java.util.List<XdmAtomicValue>asListOfAtomic()Return the result of the stream as aList<XdmAtomicValue>.java.util.List<XdmNode>asListOfNodes()Return the result of the stream as aList<XdmNode>.XdmNodeasNode()Return the result of the stream as anXdmNode.java.util.Optional<XdmAtomicValue>asOptionalAtomic()Return the result of the stream as anOptional<XdmAtomicValue>.java.util.Optional<XdmNode>asOptionalNode()Return the result of the stream as anOptional<XdmNode>.java.util.Optional<java.lang.String>asOptionalString()Return the result of the stream as anOptional<String>.java.lang.StringasString()Return the result of the stream as anString.XdmValueasXdmValue()Return the contents of the stream as an XdmValue.java.util.Optional<T>at(int position)Return the item at a given position in the stream.voidclose()Close the stream<R> Rcollect(java.util.function.Supplier<R> supplier, java.util.function.BiConsumer<R,? super T> accumulator, java.util.function.BiConsumer<R,R> combiner)<R,A>
 Rcollect(java.util.stream.Collector<? super T,A,R> collector)longcount()Returns the number of items in the streamXdmStream<T>distinct()Returns a stream consisting of the distinct items present in this stream.booleanexists()Return true if the stream is non-empty.XdmStream<T>filter(java.util.function.Predicate<? super T> predicate)Filter a stream of items, to create a new stream containing only those items that satisfy a supplied condition.java.util.Optional<T>findAny()Returns an item in the stream, chosen arbitrarily, orOptional.empty()if the stream is emptyjava.util.Optional<T>findFirst()Returns the first item in the stream, orOptional.empty()if the stream is emptyXdmStream<T>first()Return the first item of this stream, if there is one, discarding the remainder.TfirstItem()Return the first item of this stream, if there is one, discarding the remainder; return null if the stream is empty.<R> java.util.stream.Stream<R>flatMap(java.util.function.Function<? super T,? extends java.util.stream.Stream<? extends R>> mapper)Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element.java.util.stream.DoubleStreamflatMapToDouble(java.util.function.Function<? super T,? extends java.util.stream.DoubleStream> mapper)Returns anDoubleStreamconsisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element.java.util.stream.IntStreamflatMapToInt(java.util.function.Function<? super T,? extends java.util.stream.IntStream> mapper)Returns anIntStreamconsisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element.java.util.stream.LongStreamflatMapToLong(java.util.function.Function<? super T,? extends java.util.stream.LongStream> mapper)Returns anLongStreamconsisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element.<U extends XdmItem>
 XdmStream<U>flatMapToXdm(Step<U> mapper)voidforEach(java.util.function.Consumer<? super T> action)Performs a given action once for each item of the stream, in non-deterministic ordervoidforEachOrdered(java.util.function.Consumer<? super T> action)Performs a given action once for each item of the stream, in the order in which the items appearbooleanisParallel()Ask whether this stream will be evaluated in paralleljava.util.Iterator<T>iterator()Get an iterator over the items in the streamXdmStream<T>last()Return the last item of this stream, if there is one, discarding the remainder.TlastItem()Return the last item of this stream, if there is one, discarding the remainder; return null if the stream is empty.XdmStream<T>limit(long maxSize)Returns a stream containing the initial items of this stream, up to a maximum size<R> java.util.stream.Stream<R>map(java.util.function.Function<? super T,? extends R> mapper)Returns a stream consisting of the results of applying the given function to the elements of this stream.java.util.stream.DoubleStreammapToDouble(java.util.function.ToDoubleFunction<? super T> mapper)Returns aDoubleStreamconsisting of the results of applying the given function to the elements of this stream.java.util.stream.IntStreammapToInt(java.util.function.ToIntFunction<? super T> mapper)Returns anIntStreamconsisting of the results of applying the given function to the elements of this stream.java.util.stream.LongStreammapToLong(java.util.function.ToLongFunction<? super T> mapper)Returns aLongStreamconsisting of the results of applying the given function to the elements of this stream.java.util.Optional<T>max(java.util.Comparator<? super T> comparator)Returns the maximum item in the stream of items, comparing them using the suppliedComparator.java.util.Optional<T>min(java.util.Comparator<? super T> comparator)Returns the minimum item in the stream of items, comparing them using the suppliedComparator.booleannoneMatch(java.util.function.Predicate<? super T> predicate)Returns true if no item in the stream matches a supplied predicatejava.util.stream.Stream<T>onClose(java.lang.Runnable closeHandler)Returns an equivalent stream with a specified handler to be called when the stream is exhaustedjava.util.stream.Stream<T>parallel()Returns an equivalent stream that will (where possible and appropriate) be evaluated in parallelXdmStream<T>peek(java.util.function.Consumer<? super T> action)Returns the supplied stream, while invoking a supplied action on each element of the stream as it is processed.java.util.Optional<T>reduce(java.util.function.BinaryOperator<T> accumulator)Callson the underlying streamTreduce(T identity, java.util.function.BinaryOperator<T> accumulator)Performs a reduction or fold operation on the items in the stream.<U> Ureduce(U identity, java.util.function.BiFunction<U,? super T,U> accumulator, java.util.function.BinaryOperator<U> combiner)java.util.stream.Stream<T>sequential()Returns an equivalent stream that will be evaluated sequentiallyXdmStream<T>skip(long n)Returns a stream containing the items of this stream after skipping a specified number of items.XdmStream<T>sorted()Returns a stream consisting of the elements of this stream, in sorted order.XdmStream<T>sorted(java.util.Comparator<? super T> comparator)Returns a stream consisting of the elements of this stream, in sorted order using a suppliedComparator.java.util.Spliterator<T>spliterator()Get a Spliterator over the items in the streamXdmStream<T>subStream(int start, int end)Return the items at a given range of positions in the stream.java.lang.Object[]toArray()Returns an array containing the items in this stream<A> A[]toArray(java.util.function.IntFunction<A[]> generator)Returns an array containing the items in this stream, using a supplied function to generate the array; this allows the type of the returned array to be controlled.java.util.stream.Stream<T>unordered()Returns an equivalent stream that offers no guarantee of retaining the order of itemsXdmStream<T>untilFirstExclusive(java.util.function.Predicate<? super XdmItem> predicate)Experimental method to return the content of a stream up to the first item that satisfies a given predicate, excluding that itemXdmStream<T>untilFirstInclusive(java.util.function.Predicate<? super XdmItem> predicate)Experimental method to return the content of a stream up to the first item that satisfies a given predicate, including that item
 
- 
- 
- 
Method Detail- 
filterpublic XdmStream<T> filter(java.util.function.Predicate<? super T> predicate) Filter a stream of items, to create a new stream containing only those items that satisfy a supplied condition.For example, body.select(child("*")).filter(n -> n.getNodeName().getLocalName().startsWith("h"))returns a stream of all the child elements ofbodywhose local name starts with "h".Note: an alternative to filtering a stream is to use a Stepthat incorporates aPredicate, for examplebody.select(child("*").where(n -> n.getNodeName().getLocalName().startsWith("h")))- Specified by:
- filterin interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- predicate- the supplied condition. Any- Predicatecan be supplied, but some particularly useful predicates are available by calling static methods on the- Predicatesclass, for example- Predicates.empty(Steps.child("author")), which is true for a node that has no child elements with local name "author".
- Returns:
- the filtered stream
 
 - 
mappublic <R> java.util.stream.Stream<R> map(java.util.function.Function<? super T,? extends R> mapper) Returns a stream consisting of the results of applying the given function to the elements of this stream.This is an intermediate operation. For example, n.select(child(*)).map(c -> c.getNodeName().getLocalName())returns a stream delivering the local names of the element children ofn, as instances ofjava.lang.String. Note the result is aStream, not anXdmStream.- Specified by:
- mapin interface- java.util.stream.Stream<T extends XdmItem>
- Type Parameters:
- R- The element type of the new stream
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element
- Returns:
- the new stream
 
 - 
mapToIntpublic java.util.stream.IntStream mapToInt(java.util.function.ToIntFunction<? super T> mapper) Returns anIntStreamconsisting of the results of applying the given function to the elements of this stream.For example, n.select(child(*)).map(c -> c.getStringValue().length())returns a stream delivering the lengths of the string-values of the element children ofn. Note the result is aStream, not anXdmStream.This is an intermediate operation. - Specified by:
- mapToIntin interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element
- Returns:
- the new stream
 
 - 
mapToLongpublic java.util.stream.LongStream mapToLong(java.util.function.ToLongFunction<? super T> mapper) Returns aLongStreamconsisting of the results of applying the given function to the elements of this stream.This is an intermediate operation. - Specified by:
- mapToLongin interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element
- Returns:
- the new stream
 
 - 
mapToDoublepublic java.util.stream.DoubleStream mapToDouble(java.util.function.ToDoubleFunction<? super T> mapper) Returns aDoubleStreamconsisting of the results of applying the given function to the elements of this stream.This is an intermediate operation. - Specified by:
- mapToDoublein interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element
- Returns:
- the new stream
 
 - 
flatMappublic <R> java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T,? extends java.util.stream.Stream<? extends R>> mapper) Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream isclosedafter its contents have been placed into this stream. (If a mapped stream isnullan empty stream is used, instead.)This is an intermediate operation. Note: The flatMap()operation has the effect of applying a one-to-many transformation to the elements of the stream, and then flattening the resulting elements into a new stream. This corresponds to the action of the "!" operator in XPath.- Specified by:
- flatMapin interface- java.util.stream.Stream<T extends XdmItem>
- Type Parameters:
- R- The element type of the new stream
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element which produces a stream of new values
- Returns:
- the new stream
 
 - 
flatMapToXdmpublic <U extends XdmItem> XdmStream<U> flatMapToXdm(Step<U> mapper) Create a newXdmStreamby applying a mapping function (specifically, aStep) to each item in the stream. TheStepreturns a sequence of items, which are inserted into the result sequence in place of the original item.This method is similar to flatMap(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends R>>), but differs in that it returns anXdmStream, making additional methods available.Note: XdmValue.select(net.sf.saxon.s9api.streams.Step<T>)is implemented using this method, and in practice it is usually clearer to use that method directly. For examplenode.select(child("*")).flatMapToXdm(child(*))can be written asnode.select(child("*").then(child("*")). Both expressions return a stream containing all the grandchildren elements ofnode. The same result can be achieved more concisely by writingnode.select(path("*", "*"))- Type Parameters:
- U- the type of items returned by the mapping function
- Parameters:
- mapper- the mapping function
- Returns:
- a new stream of items
 
 - 
flatMapToIntpublic java.util.stream.IntStream flatMapToInt(java.util.function.Function<? super T,? extends java.util.stream.IntStream> mapper) Returns anIntStreamconsisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream isclosedafter its contents have been placed into this stream. (If a mapped stream isnullan empty stream is used, instead.)This is an intermediate operation. - Specified by:
- flatMapToIntin interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element which produces a stream of new values
- Returns:
- the new stream
- See Also:
- flatMap(Function)
 
 - 
flatMapToLongpublic java.util.stream.LongStream flatMapToLong(java.util.function.Function<? super T,? extends java.util.stream.LongStream> mapper) Returns anLongStreamconsisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream isclosedafter its contents have been placed into this stream. (If a mapped stream isnullan empty stream is used, instead.)This is an intermediate operation. - Specified by:
- flatMapToLongin interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element which produces a stream of new values
- Returns:
- the new stream
- See Also:
- flatMap(Function)
 
 - 
flatMapToDoublepublic java.util.stream.DoubleStream flatMapToDouble(java.util.function.Function<? super T,? extends java.util.stream.DoubleStream> mapper) Returns anDoubleStreamconsisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream isclosedafter its contents have placed been into this stream. (If a mapped stream isnullan empty stream is used, instead.)This is an intermediate operation. - Specified by:
- flatMapToDoublein interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- mapper- a non-interfering, stateless function to apply to each element which produces a stream of new values
- Returns:
- the new stream
- See Also:
- flatMap(Function)
 
 - 
distinctpublic XdmStream<T> distinct() Returns a stream consisting of the distinct items present in this stream. Items are compared usingObject.equals(java.lang.Object). This means that twoXdmNodeobjects are compared by node identity (so two separate nodes are distinct even if they have the same name and the same content).
 - 
sortedpublic XdmStream<T> sorted() Returns a stream consisting of the elements of this stream, in sorted order.Note, this method is unlikely to be useful, because most XdmItemvalues do not implementComparable.
 - 
sortedpublic XdmStream<T> sorted(java.util.Comparator<? super T> comparator) Returns a stream consisting of the elements of this stream, in sorted order using a suppliedComparator.
 - 
peekpublic XdmStream<T> peek(java.util.function.Consumer<? super T> action) Returns the supplied stream, while invoking a supplied action on each element of the stream as it is processed.This method is designed primarily for debugging, to allow the contents of a stream to be monitored. 
 - 
limitpublic XdmStream<T> limit(long maxSize) Returns a stream containing the initial items of this stream, up to a maximum size
 - 
skippublic XdmStream<T> skip(long n) Returns a stream containing the items of this stream after skipping a specified number of items.
 - 
forEachpublic void forEach(java.util.function.Consumer<? super T> action) Performs a given action once for each item of the stream, in non-deterministic order
 - 
forEachOrderedpublic void forEachOrdered(java.util.function.Consumer<? super T> action) Performs a given action once for each item of the stream, in the order in which the items appear
 - 
toArraypublic java.lang.Object[] toArray() Returns an array containing the items in this stream
 - 
toArraypublic <A> A[] toArray(java.util.function.IntFunction<A[]> generator) Returns an array containing the items in this stream, using a supplied function to generate the array; this allows the type of the returned array to be controlled.- Specified by:
- toArrayin interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- generator- a function that takes an integer as argument and returns an array of the given length
- Returns:
- an array containing all the items in the stream; the type of the array is determined by the generator function
 
 - 
reducepublic T reduce(T identity, java.util.function.BinaryOperator<T> accumulator) Performs a reduction or fold operation on the items in the stream.For example, given a sequence of elements of the form <change year="2020" rise="1.03"/>the accumulated rise over a number of years may be computed aschanges.stream().select(attribute("rise")) .map(a->a.getTypedValue().getDoubleValue()) .reduce(1, (x, y) -> x*y)- Specified by:
- reducein interface- java.util.stream.Stream<T extends XdmItem>
- Parameters:
- identity- an initial value of an accumulator variable. This must be an identity value for the supplied accumulator function (so if F is the accumulator function,- F(identity, V)returns- Vfor any value of- V).
- accumulator- the accumulator function: this takes the old value of the accumulator variable and the current item from the stream as arguments, and returns a new value for the accumulator variable. This function must be associative, that is,- F(A, F(B, C))must always give the same result as- F(F(A, B), C))
- Returns:
- the final value of the accumulator variable after all items have been processed.
 
 - 
reducepublic java.util.Optional<T> reduce(java.util.function.BinaryOperator<T> accumulator) Callson the underlying stream
 - 
reducepublic <U> U reduce(U identity, java.util.function.BiFunction<U,? super T,U> accumulator, java.util.function.BinaryOperator<U> combiner)
 - 
collectpublic <R> R collect(java.util.function.Supplier<R> supplier, java.util.function.BiConsumer<R,? super T> accumulator, java.util.function.BiConsumer<R,R> combiner)
 - 
collectpublic <R,A> R collect(java.util.stream.Collector<? super T,A,R> collector) 
 - 
minpublic java.util.Optional<T> min(java.util.Comparator<? super T> comparator) Returns the minimum item in the stream of items, comparing them using the suppliedComparator.
 - 
maxpublic java.util.Optional<T> max(java.util.Comparator<? super T> comparator) Returns the maximum item in the stream of items, comparing them using the suppliedComparator.
 - 
countpublic long count() Returns the number of items in the stream
 - 
anyMatchpublic boolean anyMatch(java.util.function.Predicate<? super T> predicate) Returns true if any item in the stream matches a supplied predicate
 - 
allMatchpublic boolean allMatch(java.util.function.Predicate<? super T> predicate) Returns true if every item in the stream matches a supplied predicate
 - 
noneMatchpublic boolean noneMatch(java.util.function.Predicate<? super T> predicate) Returns true if no item in the stream matches a supplied predicate
 - 
findFirstpublic java.util.Optional<T> findFirst() Returns the first item in the stream, orOptional.empty()if the stream is empty
 - 
findAnypublic java.util.Optional<T> findAny() Returns an item in the stream, chosen arbitrarily, orOptional.empty()if the stream is empty
 - 
iteratorpublic java.util.Iterator<T> iterator() Get an iterator over the items in the stream
 - 
spliteratorpublic java.util.Spliterator<T> spliterator() Get a Spliterator over the items in the stream
 - 
isParallelpublic boolean isParallel() Ask whether this stream will be evaluated in parallel
 - 
sequentialpublic java.util.stream.Stream<T> sequential() Returns an equivalent stream that will be evaluated sequentially
 - 
parallelpublic java.util.stream.Stream<T> parallel() Returns an equivalent stream that will (where possible and appropriate) be evaluated in parallel
 - 
unorderedpublic java.util.stream.Stream<T> unordered() Returns an equivalent stream that offers no guarantee of retaining the order of items
 - 
onClosepublic java.util.stream.Stream<T> onClose(java.lang.Runnable closeHandler) Returns an equivalent stream with a specified handler to be called when the stream is exhausted
 - 
closepublic void close() Close the stream
 - 
asXdmValuepublic XdmValue asXdmValue() Return the contents of the stream as an XdmValue. This is a terminal operation.- Returns:
- the contents of the stream, as an XdmValue.
 
 - 
asListpublic java.util.List<T> asList() Return the contents of the stream as aList<XdmItem>. This is a terminal operation.- Returns:
- the contents of the stream, as a List<XdmItem>.
 
 - 
asListOfNodespublic java.util.List<XdmNode> asListOfNodes() Return the result of the stream as aList<XdmNode>. This is a terminal operation.Node: the method makes it convenient to process the contents of a stream using a for-each loop, for example: for (XdmNode n : start.select(child().where(isText())).asList()) { process(n) }A more idiomatic style, however, is to use the forEach(java.util.function.Consumer<? super T>)method:start.select(child().where(isText())).forEach(n -> process(n))- Returns:
- the list of nodes delivered by the stream
- Throws:
- java.lang.ClassCastException- if the stream contains an item that is not a node
 
 - 
asOptionalNodepublic java.util.Optional<XdmNode> asOptionalNode() Return the result of the stream as anOptional<XdmNode>. This is a terminal operation.- Returns:
- the single node delivered by the stream, or absent if the stream is empty
- Throws:
- XdmCollectors.MultipleItemException- if the stream contains more than one node
- java.lang.ClassCastException- if the stream contains an item that is not a node
 
 - 
asNodepublic XdmNode asNode() Return the result of the stream as anXdmNode. This is a terminal operation.- Returns:
- the single node delivered by the stream
- Throws:
- java.lang.ClassCastException- if the stream contains an item that is not a node
- XdmCollectors.MultipleItemException- if the stream contains more than one item
- java.util.NoSuchElementException- if the stream is empty
 
 - 
asListOfAtomicpublic java.util.List<XdmAtomicValue> asListOfAtomic() Return the result of the stream as aList<XdmAtomicValue>. This is a terminal operation.- Returns:
- the list of atomic values delivered by the stream
- Throws:
- java.lang.ClassCastException- if the stream contains an item that is not an atomic value
 
 - 
asOptionalAtomicpublic java.util.Optional<XdmAtomicValue> asOptionalAtomic() Return the result of the stream as anOptional<XdmAtomicValue>. This is a terminal operation.- Returns:
- the string value of the single item delivered by the stream, or absent if the stream is empty
- Throws:
- XdmCollectors.MultipleItemException- if the stream contains more than one item
- java.lang.ClassCastException- if the stream contains an item that is not an atomic value
 
 - 
asAtomicpublic XdmAtomicValue asAtomic() Return the result of the stream as anXdmAtomicValue. This is a terminal operation.- Returns:
- the string value of the single item delivered by the stream, or a zero-length string if the stream is empty
- Throws:
- java.lang.ClassCastException- if the stream contains an item that is not atomic
- XdmCollectors.MultipleItemException- if the stream contains more than one item
- java.util.NoSuchElementException- if the stream is empty
 
 - 
asOptionalStringpublic java.util.Optional<java.lang.String> asOptionalString() Return the result of the stream as anOptional<String>. This is a terminal operation.- Returns:
- the string value of the single item delivered by the stream, or absent if the stream is empty
- Throws:
- XdmCollectors.MultipleItemException- if the stream contains more than one item
- java.lang.UnsupportedOperationException- if the stream contains an item that has no string value, for example a function item
 
 - 
asStringpublic java.lang.String asString() Return the result of the stream as anString. This is a terminal operation.- Returns:
- the string value of the single item delivered by the stream
- Throws:
- java.lang.UnsupportedOperationException- if the stream contains an item that has no string value, for example a function item
- XdmCollectors.MultipleItemException- if the stream contains more than one item
- java.util.NoSuchElementException- if the stream is empty
 
 - 
firstpublic XdmStream<T> first() Return the first item of this stream, if there is one, discarding the remainder. This is a short-circuiting operation similar tofindFirst(), but it returnsXdmStream<T>rather thanOptional<T>so that further operations such asatomize()can be applied, and so that a typed result can be returned using a method such asasOptionalNode()orasOptionalString()- Returns:
- a stream containing the first item in this stream
 
 - 
firstItempublic T firstItem() Return the first item of this stream, if there is one, discarding the remainder; return null if the stream is empty. This is a short-circuiting operation similar tofindFirst()- Returns:
- the first item in this stream, or null if the stream is empty.
 
 - 
existspublic boolean exists() Return true if the stream is non-empty. This is a short-circuiting terminal operation.- Returns:
- true if at least one item is present in the stream.
 
 - 
lastpublic XdmStream<T> last() Return the last item of this stream, if there is one, discarding the remainder. This is a short-circuiting operation similar tofirst(); it returnsXdmStream<T>rather thanOptional<T>so that further operations suchatomize()can be applied, and so that a typed result can be returned using a method such asasOptionalNode()orasOptionalString()- Returns:
- a stream containing only the last item in the stream, or an empty stream if the input is empty.
 
 - 
lastItempublic T lastItem() Return the last item of this stream, if there is one, discarding the remainder; return null if the stream is empty. This is a short-circuiting operation similar tolastItem().- Returns:
- the last item in the stream, or null if the input is empty.
 
 - 
atpublic java.util.Optional<T> at(int position) Return the item at a given position in the stream. This is a short-circuiting terminal operation.- Parameters:
- position- the required position; items in the stream are numbered from zero.
- Returns:
- the item at the given position if there is one; otherwise, Optional.empty()
 
 - 
subStreampublic XdmStream<T> subStream(int start, int end) Return the items at a given range of positions in the stream. For example, subStream(0, 3) returns the first three items in the stream. This is a short-circuiting terminal operation.- Parameters:
- start- the position of the first required item; items in the stream are numbered from zero.
- end- the position immediately after the last required item.
- Returns:
- a stream containing those items whose zero-based position is greater-than-or-equal-to start, and less-than end. No error occurs if either start or end is out of range, or if end is less than start.
 
 - 
untilFirstInclusivepublic XdmStream<T> untilFirstInclusive(java.util.function.Predicate<? super XdmItem> predicate) Experimental method to return the content of a stream up to the first item that satisfies a given predicate, including that item- Parameters:
- predicate- a condition that determines when the stream should stop
- Returns:
- a stream containing all items in the base stream up to and including the first item that satisfies a given predicate.
 
 - 
untilFirstExclusivepublic XdmStream<T> untilFirstExclusive(java.util.function.Predicate<? super XdmItem> predicate) Experimental method to return the content of a stream up to the first item that satisfies a given predicate, excluding that item- Parameters:
- predicate- a condition that determines when the stream should stop
- Returns:
- a stream containing all items in the base stream up to the item immediately before the first item that satisfies a given predicate.
 
 
- 
 
-