PagedFlux<T> Class
- java.
lang. Object - reactor.
core. publisher. Flux - com.
azure. core. util. paging. ContinuablePagedFlux<C,T,P> - com.
azure. core. util. paging. ContinuablePagedFluxCore<C,T,P> - com.
azure. core. http. rest. PagedFluxBase<T,P> - com.
azure. core. http. rest. PagedFlux<T>
- com.
- com.
- com.
- com.
- reactor.
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 |
---|---|
Paged |
mapPage(Function<T,S> mapper)
Deprecated
refer the decoration samples for PagedFlux#create(Supplier).
Maps this Paged |
static
Paged |
create(Supplier<PageRetriever<String,PagedResponse<T>>> provider)
Creates an instance of PagedFlux<T> backed by a Page Retriever Supplier (provider). |
Methods inherited from PagedFluxBase
Methods inherited from ContinuablePagedFlux
Methods inherited from ContinuablePagedFluxCore
Methods inherited from java.lang.Object
Methods inherited from reactor.core.publisher.Flux
Constructor Details
PagedFlux
public PagedFlux(Function
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:
PagedFlux
public PagedFlux(Function
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:
PagedFlux
public PagedFlux(Supplier
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:
PagedFlux
public PagedFlux(Supplier
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:
Method Details
mapPage
@Deprecated
public PagedFlux mapPage(Function
Deprecated
Maps this PagedFlux instance of T to a PagedFlux instance of type S as per the provided mapper function.
Parameters:
Returns:
create
public static PagedFlux
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>>> exceptionProvider = () ->
(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(exceptionProvider);
Parameters:
Returns: