Interface Batch<T>

  • Type Parameters:
    T - the type of value produced by each promise in the batch
    All Known Subinterfaces:
    ParallelBatch<T>, SerialBatch<T>

    public interface Batch<T>
    A batch of promises to be processed.

    See SerialBatch and ParallelBatch.

    
     import ratpack.exec.Promise;
     import ratpack.exec.util.Batch;
     import ratpack.exec.util.ParallelBatch;
     import ratpack.test.exec.ExecHarness;
    
     import java.util.ArrayList;
     import java.util.List;
    
     import static org.junit.jupiter.api.Assertions.assertEquals;
    
     public class Example {
       public static void main(String[] args) throws Exception {
         int sum = ExecHarness.yieldSingle(e -> {
    
           List<Promise<Integer>> promises = new ArrayList<>();
           for (int i = 0; i < 100; i++) {
             promises.add(Promise.value(i));
           }
    
           return ParallelBatch.of(promises)
             .publisher()
             .reduce(0, (r, i) -> r + i);
    
         }).getValueOrThrow();
    
         assertEquals(sum, 4950);
       }
     }
     
    Since:
    1.4
    • Method Detail

      • yieldAll

        Promise<List<? extends ExecResult<T>>> yieldAll()
        Processes all the promises of the batch, collecting any errors.

        This method differs from yield() in that every promise will be processed, regardless of any failure. As such, it returns ExecResult objects representing the outcome as it may be an error.

        The promise returned from this method will not fail, as failure is conveyed via the result objects of the list.

        The order of the entries in the promised list corresponds to the order of the promises originally. That is, it is guaranteed that the 2nd item in the list was the 2nd promise specified.

        Returns:
        a promise for the result of each promise
      • yield

        Promise<List<T>> yield()
        Processes all the promises of the batch, stopping at the first error.

        This method differs from yieldAll() in that processing will be halted as soon as the first error occurs. The error will be propagated through the returned promise.

        The order of the entries in the promised list corresponds to the order of the promises originally. That is, it is guaranteed that the 2nd item in the list was the 2nd promise specified. It does not reflect the order in which promises completed.

        Returns:
        a promise for each promised value
      • forEach

        Operation forEach​(BiAction<? super Integer,​? super T> consumer)
        Processes the promises of the batch, stopping at the first error, emitting results to the given callback.

        This method is useful for aggregating or reducing the batch.

        The returned operation will complete after all items have been consumed or if there is an error.

        The integer value given the to consumer indicates the source position of the corresponding promise.

        Parameters:
        consumer - the consumer of promise values
        Returns:
        an operation for the consumption of the values
      • publisher

        TransformablePublisher<T> publisher()
        Creates a publisher that emits the promised values.

        This method differs to yield() and yieldAll() in that items are emitted as soon as they have completed. As such, it is more appropriate when wanting to stream the results in some fashion.

        Items are emitted in completion order, not source order.

        Processing is effectively halted when the first error occurs.

        The returned publisher is NOT execution bound.

        Returns:
        a publisher for the batch