Package org.eclipse.rdf4j.spring.resultcache

## Class ReusableTupleQueryResult

- java.lang.Object
- - org.eclipse.rdf4j.spring.resultcache.ReusableTupleQueryResult

- All Implemented Interfaces:
    `AutoCloseable`, `Iterable<BindingSet>`, `CloseableIteration<BindingSet,​QueryEvaluationException>`, `Iteration<BindingSet,​QueryEvaluationException>`, `QueryResult<BindingSet>`, `TupleQueryResult`, `ThrowableRecorder`

      public class ReusableTupleQueryResult
      extends Object
      implements TupleQueryResult, ThrowableRecorder

  Wrapper for a TupleQueryResult, allowing the result to be replayed. The wrapper copies the result data, consuming the original result fully on `close()`.

  Example:

       TupleQueryResult result = tupleQuery.execute();
       ReuseableTupleQueryResult reusable = new ReuseableTupleQueryResult(result);
       while (reusable.hasNext()) {
              reuseable.next();
       }
       reuseable.close();
       TupleQueryResult cached = reuseable.recreateTupleQueryResult();
       while (cached.hasNext()) {
              cached.next();
       }
       cached.close();

  Since:
    4.0.0
  Author:
    Florian Kleedorfer

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ReusableTupleQueryResult​(TupleQueryResult result, BindingSet queryBindings)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `canReuse()` |
    `void` | `close()` | Closes this iteration, freeing any resources that it is holding.
    `void` | `forEach​(Consumer<? super BindingSet> action)` |
    `List<String>` | `getBindingNames()` | Gets the names of the bindings, in order of projection.
    `boolean` | `hasNext()` | Returns true if the iteration has more elements.
    `Iterator<BindingSet>` | `iterator()` |
    `BindingSet` | `next()` | Returns the next element in the iteration.
    `boolean` | `queryBindingsAreIdentical​(BindingSet candidate)` |
    `void` | `recordThrowable​(Throwable t)` |
    `CachedTupleQueryResult` | `recreateTupleQueryResult()` |
    `void` | `remove()` | Removes from the underlying collection the last element returned by the iteration (optional operation).
    `Spliterator<BindingSet>` | `spliterator()` |
    `Stream<BindingSet>` | `stream()` | Convert the results to a Java 8 Stream.

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

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

- - ### Constructor Detail

    - #### ReusableTupleQueryResult

          public ReusableTupleQueryResult​(TupleQueryResult result,
                                          BindingSet queryBindings)

  - ### Method Detail

    - #### queryBindingsAreIdentical

          public boolean queryBindingsAreIdentical​(BindingSet candidate)

    - #### canReuse

          public boolean canReuse()

    - #### recreateTupleQueryResult

          public CachedTupleQueryResult recreateTupleQueryResult()

    - #### recordThrowable

          public void recordThrowable​(Throwable t)

      Specified by:
        `recordThrowable` in interface `ThrowableRecorder`

    - #### getBindingNames

          public List<String> getBindingNames()
                                       throws QueryEvaluationException

      Description copied from interface: `TupleQueryResult`
      Gets the names of the bindings, in order of projection.
      Specified by:
        `getBindingNames` in interface `TupleQueryResult`
      Returns:
        The binding names, in order of projection.
      Throws:
        `QueryEvaluationException`

    - #### iterator

          public Iterator<BindingSet> iterator()

      Specified by:
        `iterator` in interface `Iterable<BindingSet>`
      Specified by:
        `iterator` in interface `QueryResult<BindingSet>`

    - #### close

          public void close()
                     throws QueryEvaluationException

      Description copied from interface: `CloseableIteration`
      Closes this iteration, freeing any resources that it is holding. If the iteration has already been closed then invoking this method has no effect.
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `CloseableIteration<BindingSet,​QueryEvaluationException>`
      Throws:
        `QueryEvaluationException`

    - #### hasNext

          public boolean hasNext()
                          throws QueryEvaluationException

      Description copied from interface: `Iteration`
      Returns true if the iteration has more elements. (In other words, returns true if `Iteration.next()` would return an element rather than throwing a NoSuchElementException.)
      Specified by:
        `hasNext` in interface `Iteration<BindingSet,​QueryEvaluationException>`
      Returns:
        true if the iteration has more elements.
      Throws:
        `QueryEvaluationException`

    - #### next

          public BindingSet next()
                          throws QueryEvaluationException

      Description copied from interface: `Iteration`
      Returns the next element in the iteration.
      Specified by:
        `next` in interface `Iteration<BindingSet,​QueryEvaluationException>`
      Returns:
        the next element in the iteration.
      Throws:
        `QueryEvaluationException`

    - #### remove

          public void remove()
                      throws QueryEvaluationException

      Description copied from interface: `Iteration`
      Removes from the underlying collection the last element returned by the iteration (optional operation). This method can be called only once per call to next.
      Specified by:
        `remove` in interface `Iteration<BindingSet,​QueryEvaluationException>`
      Throws:
        `QueryEvaluationException`

    - #### stream

          public Stream<BindingSet> stream()

      Description copied from interface: `Iteration`
      Convert the results to a Java 8 Stream. If this iteration implements CloseableIteration it should be closed (by calling Stream#close() or using try-with-resource) if it is not fully consumed.
      Specified by:
        `stream` in interface `Iteration<BindingSet,​QueryEvaluationException>`
      Returns:
        stream

    - #### forEach

          public void forEach​(Consumer<? super BindingSet> action)

      Specified by:
        `forEach` in interface `Iterable<BindingSet>`

    - #### spliterator

          public Spliterator<BindingSet> spliterator()

      Specified by:
        `spliterator` in interface `Iterable<BindingSet>`