Interface ResultIterable<T>
- Type Parameters:
T
- iterable element type
- All Superinterfaces:
Iterable<T>
- All Known Subinterfaces:
BatchResultIterable<T>
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic class
An implementation ofResultIterator
that delegates calls to the iterator provided in the constructor. -
Method Summary
Modifier and TypeMethodDescriptiondefault <R> R
Collect the results into a container specified by a collector.default <R extends Collection<? super T>>
RcollectInto
(Type containerType) Collect the results into a container type.default <R extends Collection<? super T>>
RcollectInto
(GenericType<R> containerType) Collect the results into a collection type.Returns results in aList
.Returns results in aSet
.default <K,
V> Map <K, V> collectToMap
(Function<? super T, ? extends K> keyFunction, Function<? super T, ? extends V> valueFunction) Collect the results into a Map, using the given functions to compute keys and values.default ResultIterable
<T> Convenience method to filter theResultIterable
by applying the specifiedPredicate
.
This method has the look and feel ofStream.filter(Predicate)
without making use of streams.Returns the first row in the result set, if present.findOne()
Returns the only row in the result set, if any.default T
findOnly()
Deprecated.default T
first()
Returns the first row in the result set.default void
default int
forEachWithCount
(Consumer<? super T> action) Performs the specified action on each remaining element and returns the iteration i.e. record count.
It is often useful (e.g. for logging) to know the record count while processing result sets.iterator()
Stream all the rows of the result set out with anIterator
.list()
Returns results in aList
using the JDK specific default implementation ofList
as provided byCollectors.toList()
.default <R> ResultIterable
<R> Returns aResultIterable<U>
derived from thisResultIterable<T>
, by transforming elements using the given mapper function.static <T> ResultIterable
<T> of
(Supplier<ResultSet> resultSetSupplier, RowMapper<T> mapper, StatementContext ctx) Returns a ResultIterable backed by the given result set supplier, mapper, and context.static <T> ResultIterable
<T> of
(ResultIterator<T> iterator) Returns a ResultIterable backed by the given iterator.default T
one()
Returns the only row in the result set.default <U> U
reduce
(U identity, BiFunction<U, T, U> accumulator) Reduce the results.set()
Returns results in aSet
using the JDK specific default implementation ofSet
as provided byCollectors.toSet()
.stream()
Returns the stream of results.default <C extends Collection<T>>
CtoCollection
(Supplier<C> supplier) Collect the results into a collection object similar toCollectors.toCollection(Supplier)
.default <X extends Exception>
voiduseIterator
(IteratorConsumer<T, X> consumer) Passes the iterator of results to the consumer.default <X extends Exception>
voiduseStream
(StreamConsumer<T, X> consumer) Passes the stream of results to the consumer.default <R,
X extends Exception>
RwithIterator
(IteratorCallback<T, R, X> callback) Passes the iterator of results to the callback.default <R,
X extends Exception>
RwithStream
(StreamCallback<T, R, X> callback) Passes the stream of results to the callback.Methods inherited from interface java.lang.Iterable
spliterator
-
Method Details
-
of
static <T> ResultIterable<T> of(Supplier<ResultSet> resultSetSupplier, RowMapper<T> mapper, StatementContext ctx) Returns a ResultIterable backed by the given result set supplier, mapper, and context.- Type Parameters:
T
- the mapped type- Parameters:
resultSetSupplier
- result set suppliermapper
- row mapperctx
- statement context- Returns:
- the result iterable
-
of
Returns a ResultIterable backed by the given iterator.- Type Parameters:
T
- iterator element type- Parameters:
iterator
- the result iterator- Returns:
- a ResultIterable
-
iterator
ResultIterator<T> iterator()Stream all the rows of the result set out with anIterator
. TheIterator
must be closed to release database resources. -
useIterator
Passes the iterator of results to the consumer. Database resources owned by the query are released before this method returns.- Parameters:
consumer
- a consumer which receives the iterator of results.- Throws:
X
- any exception thrown by the callback
-
withIterator
Passes the iterator of results to the callback. Database resources owned by the query are released before this method returns.- Type Parameters:
R
- the type returned by the callback- Parameters:
callback
- a callback which receives the iterator of results, and returns some result.- Returns:
- the value returned by the callback.
- Throws:
X
- any exception thrown by the callback
-
map
Returns aResultIterable<U>
derived from thisResultIterable<T>
, by transforming elements using the given mapper function.- Type Parameters:
R
- Element type of the returned ResultIterable- Parameters:
mapper
- function to apply to elements of this ResultIterable- Returns:
- the new ResultIterable
-
forEach
-
forEachWithCount
Performs the specified action on each remaining element and returns the iteration i.e. record count.
It is often useful (e.g. for logging) to know the record count while processing result sets.int cnt = h.createQuery("select * from something").mapTo(String.class) .forEachWithCount(System.out::println); System.out.println(cnt + " records selected");
- Parameters:
action
- action to apply (required)- Returns:
- iteration count
- Since:
- 3.31
-
one
Returns the only row in the result set. Returnsnull
if the row itself isnull
.- Returns:
- the only row in the result set.
- Throws:
IllegalStateException
- if the result set contains zero or multiple rows
-
findOne
Returns the only row in the result set, if any. ReturnsOptional.empty()
if zero rows are returned, or if the row itself isnull
.- Returns:
- the only row in the result set, if any.
- Throws:
IllegalStateException
- if the result set contains multiple rows
-
findOnly
Get the only row in the result set.- Returns:
- the object mapped from the singular row in the results
- Throws:
IllegalStateException
- if zero or multiple rows are returned
-
first
Returns the first row in the result set. Returnsnull
if the row itself isnull
.- Returns:
- the first row in the result set.
- Throws:
IllegalStateException
- if zero rows are returned
-
findFirst
-
stream
Returns the stream of results.Note: the returned stream owns database resources, and must be closed via a call to
BaseStream.close()
, or by using the stream in a try-with-resources block:try (Stream<T> stream = query.stream()) { // do stuff with stream }
- Returns:
- the stream of results.
- See Also:
-
useStream
Passes the stream of results to the consumer. Database resources owned by the query are released before this method returns.- Type Parameters:
X
- the exception type thrown by the callback, if any- Parameters:
consumer
- a consumer which receives the stream of results.- Throws:
X
- any exception thrown by the callback
-
withStream
Passes the stream of results to the callback. Database resources owned by the query are released before this method returns.- Type Parameters:
R
- the type returned by the callbackX
- the exception type thrown by the callback, if any- Parameters:
callback
- a callback which receives the stream of results, and returns some result.- Returns:
- the value returned by the callback.
- Throws:
X
- any exception thrown by the callback
-
list
Returns results in aList
using the JDK specific default implementation ofList
as provided byCollectors.toList()
. The same limitations apply to the list instance returned from this method. If more control over the list type is required, usetoCollection(Supplier)
or see thecollectIntoList()
method.- Returns:
- results in a
List
- See Also:
-
set
Returns results in aSet
using the JDK specific default implementation ofSet
as provided byCollectors.toSet()
. The same limitations apply to the set instance returned from this method. If more control over the set type is required, usetoCollection(Supplier)
or see thecollectIntoSet()
method.- Returns:
- results in a
Set
- Since:
- 3.38.0
- See Also:
-
collect
-
collectToMap
default <K,V> Map<K,V> collectToMap(Function<? super T, ? extends K> keyFunction, Function<? super T, ? extends V> valueFunction) Collect the results into a Map, using the given functions to compute keys and values.- Type Parameters:
K
- the key typeV
- the value type- Parameters:
keyFunction
- a function that transforms the query result to a map keyvalueFunction
- a function that transforms the query result to a map value- Returns:
- the collected Map
- Since:
- 3.38.0
-
toCollection
Collect the results into a collection object similar toCollectors.toCollection(Supplier)
.- Parameters:
supplier
- a supplier providing a new empty Collection into which the results will be inserted- Returns:
- A new collection with all results inserted
- Since:
- 3.38.0
-
collectInto
Collect the results into a container type.- Parameters:
containerType
- AType
object that must describe a container type- Returns:
- A new collection implementing the container type with all results inserted
- Throws:
UnsupportedOperationException
- if the implementation does not support this operation- Since:
- 3.38.0
-
collectInto
Collect the results into a collection type.- Parameters:
containerType
- AGenericType
object that describes a collection type- Returns:
- A new collection implementing the container type with all results inserted
- Throws:
UnsupportedOperationException
- if the implementation does not support this operation- Since:
- 3.38.0
-
collectIntoList
Returns results in aList
. The implementation of the list can be changed by registering aCollector
:
orjdbi.getConfig(JdbiCollectors.class).registerCollector(List.class, Collectors.toCollection(LinkedList::new));
handle.registerCollector(List.class, Collectors.toCollection(LinkedList::new));
If no collector is registered, then this method behaves likelist()
.- Returns:
- results in a
List
- Since:
- 3.38.0
- See Also:
-
collectIntoSet
Returns results in aSet
. The implementation of the set can be changed by registering aCollector
:
orjdbi.getConfig(JdbiCollectors.class).registerCollector(Set.class, Collectors.toCollection(LinkedHashSet::new));
handle.registerCollector(Set.class, Collectors.toCollection(LinkedHashSet::new));
If no collector is registered, then this method behaves likeset()
.- Returns:
- results in a
Set
- Since:
- 3.38.0
- See Also:
-
reduce
Reduce the results. Using aBiFunction<U, T, U>
, repeatedly combine query results until only a single value remains.- Type Parameters:
U
- the accumulator type- Parameters:
identity
- theU
to combine with the first resultaccumulator
- the function to apply repeatedly- Returns:
- the final
U
-
filter
Convenience method to filter theResultIterable
by applying the specifiedPredicate
.
This method has the look and feel ofStream.filter(Predicate)
without making use of streams.Please note that filtering takes place in Java i.e. your client code, not in the database.
Filtering inside the database will most likely be of higher performance than filtering outside, as intermediate results are loaded into Java and then discarded. Moreover, indexes that may exist in the database will not be utilized here.- Parameters:
predicate
- a non-null predicate to apply to each element to determine whether it should be included in the result- Returns:
- the new result iterable
- Since:
- 3.31
-
one()
orfindOne()
instead.