PagedFlux<T> Class

Type Parameters

T

The type of items in a PagedResponse

public class PagedFlux
extends PagedFluxBase<T,PagedResponse<T>>

PagedFlux is a Flux that provides the ability to operate on paginated REST responses of type PagedResponse<T> and individual items in such pages. When processing the response by page each response will contain the items in the page as well as the REST response details such as status code and headers.

To process one item at a time, simply subscribe to this flux as shown below

Code sample

// Subscribe to process one item at a time
 pagedFlux
     .log()
     .subscribe(item -> System.out.println("Processing item with value: " + item),
         error -> System.err.println("An error occurred: " + error),
         () -> System.out.println("Processing complete."));

To process one page at a time, use #byPage() method as shown below

Code sample

// Subscribe to process one page at a time from the beginning
 pagedFlux
     .byPage()
     .log()
     .subscribe(page -> System.out.printf("Processing page containing item values: %s%n",
         page.getElements().stream().map(String::valueOf).collect(Collectors.joining(", "))),
         error -> System.err.println("An error occurred: " + error),
         () -> System.out.println("Processing complete."));

To process items one page at a time starting from any page associated with a continuation token, use #byPage(String) as shown below

Code sample

// Subscribe to process one page at a time starting from a page associated with
 // a continuation token
 String continuationToken = getContinuationToken();
 pagedFlux
     .byPage(continuationToken)
     .log()
     .doOnSubscribe(ignored -> System.out.println(
         "Subscribed to paged flux processing pages starting from: " + continuationToken))
     .subscribe(page -> System.out.printf("Processing page containing item values: %s%n",
         page.getElements().stream().map(String::valueOf).collect(Collectors.joining(", "))),
         error -> System.err.println("An error occurred: " + error),
         () -> System.out.println("Processing complete."));

Constructor Summary

Constructor Description
PagedFlux(Function<Integer,Mono<PagedResponse<T>>> firstPageRetriever)

Creates an instance of PagedFlux<T> that consists of only a single page with a given element count.

PagedFlux(Function<Integer,Mono<PagedResponse<T>>> firstPageRetriever, BiFunction<String,Integer,Mono<PagedResponse<T>>> nextPageRetriever)

Creates an instance of PagedFlux<T> that is capable of retrieving multiple pages with of a given page size.

PagedFlux(Supplier<Mono<PagedResponse<T>>> firstPageRetriever)

Creates an instance of PagedFlux<T> that consists of only a single page.

PagedFlux(Supplier<Mono<PagedResponse<T>>> firstPageRetriever, Function<String,Mono<PagedResponse<T>>> nextPageRetriever)

Creates an instance of PagedFlux<T>.

Method Summary

Modifier and Type Method and Description
PagedFlux<S> mapPage(Function<T,S> mapper)

Deprecated

refer the decoration samples for PagedFlux#create(Supplier).

Maps this PagedFlux instance of T to a PagedFlux instance of type S as per the provided mapper function.

static PagedFlux<T> create(Supplier<PageRetriever<String,PagedResponse<T>>> provider)

Creates an instance of PagedFlux<T> backed by a Page Retriever Supplier (provider).

Methods inherited from PagedFluxBase

byPage byPage com.azure.core.http.rest.PagedFluxBase.subscribe(reactor.core.CoreSubscriber<

Methods inherited from ContinuablePagedFlux

Methods inherited from ContinuablePagedFluxCore

Methods inherited from java.lang.Object

Methods inherited from reactor.core.publisher.Flux

reduce reduceWith scan scanWith buffer buffer buffer bufferTimeout bufferTimeout cast collect doOnError onErrorContinue onErrorContinue onErrorMap onErrorResume onErrorReturn subscribeWith zip zip first first firstWithSignal firstWithSignal firstWithValue firstWithValue index merge merge merge mergeComparing mergeDelayError mergeOrdered mergePriority mergeSequential mergeSequential mergeSequential mergeSequential mergeSequentialDelayError mergeSequentialDelayError collectMap collectMap collectMultimap collectMultimap groupBy groupBy collectMap collectMultimap groupBy groupBy error zip zip as collect concatMapIterable concatMapIterable doOnDiscard flatMap flatMap flatMapIterable flatMapIterable flatMapSequential flatMapSequential flatMapSequential flatMapSequentialDelayError handle publish publish using using usingWhen usingWhen generate generate combineLatest combineLatest combineLatest combineLatest zip zip zip combineLatest zip combineLatest zip combineLatest zip combineLatest zip combineLatest zip zipWith zipWith zipWithIterable zipWith zipWith zipWithIterable concat concat concat concat concatDelayError concatDelayError concatDelayError concatDelayError create create defer deferContextual deferWithContext empty error error from fromArray fromIterable fromStream fromStream generate just just merge merge merge mergeComparing mergeComparing mergeComparingDelayError mergeOrdered mergeOrdered mergePriority mergePriority mergePriorityDelayError mergeSequential mergeSequential mergeSequentialDelayError never onAssembly onAssembly push push switchOnNext switchOnNext groupJoin join zip withLatestFrom bufferWhen bufferWhen timeout timeout windowWhen delaySubscription ofType sample sampleFirst sampleTimeout sampleTimeout timeout distinct distinct bufferUntilChanged bufferUntilChanged bufferUntilChanged concatMap concatMap concatMapDelayError concatMapDelayError concatMapDelayError distinct distinctUntilChanged distinctUntilChanged flatMap flatMap flatMapDelayError map mapNotNull switchMap switchMap switchOnFirst switchOnFirst then thenMany transform transformDeferred transformDeferredContextual windowUntilChanged windowUntilChanged windowUntilChanged dematerialize all any blockFirst blockFirst blockLast blockLast buffer buffer buffer buffer buffer buffer buffer buffer bufferTimeout bufferTimeout bufferUntil bufferUntil bufferWhile cache cache cache cache cache cache cancelOn checkpoint checkpoint checkpoint collectList collectSortedList collectSortedList concatWith concatWithValues contextWrite contextWrite count defaultIfEmpty delayElements delayElements delaySequence delaySequence delaySubscription delaySubscription delayUntil distinct distinctUntilChanged doAfterTerminate doFinally doFirst doOnCancel doOnComplete doOnEach doOnError doOnError doOnNext doOnRequest doOnSubscribe doOnTerminate elapsed elapsed elementAt elementAt expand expand expandDeep expandDeep filter filterWhen filterWhen getPrefetch hasElement hasElements hide ignoreElements index interval interval interval interval last last limitRate limitRate limitRequest log log log log log log materialize mergeComparingWith mergeOrderedWith mergeWith metrics name next onBackpressureBuffer onBackpressureBuffer onBackpressureBuffer onBackpressureBuffer onBackpressureBuffer onBackpressureBuffer onBackpressureBuffer onBackpressureDrop onBackpressureDrop onBackpressureError onBackpressureLatest onErrorComplete onErrorComplete onErrorComplete onErrorContinue onErrorMap onErrorMap onErrorResume onErrorResume onErrorReturn onErrorReturn onErrorStop onTerminateDetach or parallel parallel parallel publish publish publishNext publishOn publishOn publishOn range reduce repeat repeat repeat repeat repeatWhen replay replay replay replay replay replay retry retry retryWhen sample sampleFirst scan share shareNext single single singleOrEmpty skip skip skip skipLast skipUntil skipUntilOther skipWhile sort sort startWith startWith startWith subscribe subscribe subscribe subscribe subscribe subscribe subscribe subscribeOn subscribeOn subscriberContext subscriberContext switchIfEmpty tag take take take take takeLast takeUntil takeUntilOther takeWhile then thenEmpty timed timed timeout timeout timeout timeout timestamp timestamp toIterable toIterable toIterable toStream toStream toString window window window window window window window windowTimeout windowTimeout windowTimeout windowTimeout windowUntil windowUntil windowUntil windowWhile windowWhile

Constructor Details

PagedFlux

public PagedFlux(Function<><>>> firstPageRetriever)

Creates an instance of PagedFlux<T> that consists of only a single page with a given element count.

Code sample

// A function that fetches the single page of data from a source/service.
 Function<Integer, Mono<PagedResponse<Integer>>> singlePageRetriever = pageSize ->
     getFirstPageWithSize(pageSize);

 PagedFlux<Integer> singlePageFluxWithPageSize = new PagedFlux<Integer>(singlePageRetriever);

Parameters:

firstPageRetriever - Function that retrieves the first page.

PagedFlux

public PagedFlux(Function<><>>> firstPageRetriever, BiFunction<><>>> nextPageRetriever)

Creates an instance of PagedFlux<T> that is capable of retrieving multiple pages with of a given page size.

Code sample

// A function that fetches the first page of data from a source/service.
 Function<Integer, Mono<PagedResponse<Integer>>> firstPageRetriever = pageSize -> getFirstPageWithSize(pageSize);

 // A function that fetches subsequent pages of data from a source/service given a continuation token.
 BiFunction<String, Integer, Mono<PagedResponse<Integer>>> nextPageRetriever = (continuationToken, pageSize) ->
     getNextPageWithSize(continuationToken, pageSize);

 PagedFlux<Integer> pagedFluxWithPageSize = new PagedFlux<>(firstPageRetriever, nextPageRetriever);

Parameters:

firstPageRetriever - Function that retrieves the first page.
nextPageRetriever - BiFunction that retrieves the next page given a continuation token and page size.

PagedFlux

public PagedFlux(Supplier<><>>> firstPageRetriever)

Creates an instance of PagedFlux<T> that consists of only a single page. This constructor takes a Supplier that return the single page of T.

Code sample

// A supplier that fetches the first page of data from source/service
 Supplier<Mono<PagedResponse<Integer>>> firstPageRetrieverFunction = () -> getFirstPage();

 PagedFlux<Integer> pagedFluxInstance = new PagedFlux<>(firstPageRetrieverFunction,
     nextPageRetriever);

Parameters:

firstPageRetriever - Supplier that retrieves the first page.

PagedFlux

public PagedFlux(Supplier<><>>> firstPageRetriever, Function<><>>> nextPageRetriever)

Creates an instance of PagedFlux<T>. The constructor takes a Supplier and Function. The Supplier returns the first page of T, the Function retrieves subsequent pages of T.

Code sample

// A supplier that fetches the first page of data from source/service
 Supplier<Mono<PagedResponse<Integer>>> firstPageRetriever = () -> getFirstPage();

 // A function that fetches subsequent pages of data from source/service given a continuation token
 Function<String, Mono<PagedResponse<Integer>>> nextPageRetriever =
     continuationToken -> getNextPage(continuationToken);

 PagedFlux<Integer> pagedFlux = new PagedFlux<>(firstPageRetriever,
     nextPageRetriever);

Parameters:

firstPageRetriever - Supplier that retrieves the first page
nextPageRetriever - Function that retrieves the next page given a continuation token

Method Details

mapPage

@Deprecated
public PagedFlux mapPage(Function mapper)

Deprecated

refer the decoration samples for PagedFlux#create(Supplier).

Maps this PagedFlux instance of T to a PagedFlux instance of type S as per the provided mapper function.

Parameters:

mapper - The mapper function to convert from type T to type S.

Returns:

A PagedFlux of type S.

create

public static PagedFlux create(Supplier<><>>> provider)

Creates an instance of PagedFlux<T> backed by a Page Retriever Supplier (provider). When invoked provider should return PageRetriever<C,P>. The provider will be called for each Subscription to the PagedFlux instance. The Page Retriever can get called multiple times in serial fashion, each time after the completion of the Flux returned from the previous invocation. The final completion signal will be send to the Subscriber when the last Page emitted by the Flux returned by Page Retriever has null continuation token. The provider is useful mainly in two scenarios:

  • To manage state across multiple call to Page Retrieval within the same Subscription.
  • To decorate a PagedFlux to produce new PagedFlux.

Decoration sample

// Transform a PagedFlux with Integer items to PagedFlux of String items.
 final PagedFlux<Integer> intPagedFlux = createAnInstance();

 // PagedResponse<Integer> to PagedResponse<String> mapper
 final Function<PagedResponse<Integer>, PagedResponse<String>> responseMapper
     = intResponse -> new PagedResponseBase<Void, String>(intResponse.getRequest(),
     intResponse.getStatusCode(),
     intResponse.getHeaders(),
     intResponse.getValue()
         .stream()
         .map(intValue -> Integer.toString(intValue)).collect(Collectors.toList()),
     intResponse.getContinuationToken(),
     null);

 final Supplier<PageRetriever<String, PagedResponse<String>>> provider = () ->
     (continuationToken, pageSize) -> {
         Flux<PagedResponse<Integer>> flux = (continuationToken == null)
             ? intPagedFlux.byPage()
             : intPagedFlux.byPage(continuationToken);
         return flux.map(responseMapper);
     };
 PagedFlux<String> strPagedFlux = PagedFlux.create(provider);

 // Create a PagedFlux from a PagedFlux with all exceptions mapped to a specific exception.
 final PagedFlux<Integer> pagedFlux = createAnInstance();
 final Supplier<PageRetriever<String, PagedResponse<Integer>>> eprovider = () ->
     (continuationToken, pageSize) -> {
         Flux<PagedResponse<Integer>> flux = (continuationToken == null)
             ? pagedFlux.byPage()
             : pagedFlux.byPage(continuationToken);
         return flux.onErrorMap(Exception.class, PaginationException::new);
     };
 final PagedFlux<Integer> exceptionMappedPagedFlux = PagedFlux.create(eprovider);

Parameters:

provider - the Page Retrieval Provider

Returns:

PagedFlux backed by the Page Retriever Function Supplier

Applies to