PagingDataFutures
public final class PagingDataFutures
Summary
Public methods |
|
|---|---|
static final @NonNull PagingData<@NonNull T> |
<T extends Object> PagingDataFutures.filter(Returns a |
static final @NonNull PagingData<@NonNull R> |
<T extends Object, R extends Object> PagingDataFutures.flatMap(Returns a |
static final @NonNull PagingData<@NonNull R> |
<T extends R, R extends Object> PagingDataFutures.insertSeparators(Returns a |
static final @NonNull PagingData<@NonNull R> |
<T extends Object, R extends Object> PagingDataFutures.map(Returns a |
Public methods
PagingDataFutures.filter
@NonNull
public static final PagingData<@NonNull T> <T extends Object> PagingDataFutures.filter(
@NonNull PagingData<@NonNull T> receiver,
@NonNull AsyncFunction<@NonNull T, @NonNull Boolean> predicate,
@NonNull Executor executor
)
Returns a PagingData containing only elements matching the given predicate.
| Parameters | |
|---|---|
@NonNull AsyncFunction<@NonNull T, @NonNull Boolean> predicate |
|
@NonNull Executor executor |
|
PagingDataFutures.flatMap
@NonNull
public static final PagingData<@NonNull R> <T extends Object, R extends Object> PagingDataFutures.flatMap(
@NonNull PagingData<@NonNull T> receiver,
@NonNull AsyncFunction<@NonNull T, @NonNull Iterable<@NonNull R>> transform,
@NonNull Executor executor
)
Returns a PagingData of all elements returned from applying the given transform to each element, as it is loaded.
| Parameters | |
|---|---|
@NonNull AsyncFunction<@NonNull T, @NonNull Iterable<@NonNull R>> transform |
|
@NonNull Executor executor |
|
PagingDataFutures.insertSeparators
@NonNull
public static final PagingData<@NonNull R> <T extends R, R extends Object> PagingDataFutures.insertSeparators(
@NonNull PagingData<@NonNull T> receiver,
@NonNull AsyncFunction<@NonNull AdjacentItems<@NonNull T>, @NonNull R> generator,
@NonNull Executor executor
)
Returns a PagingData containing each original element, with an optional separator generated by generator, given the elements before and after (or null, in boundary conditions).
Note that this transform is applied asynchronously, as pages are loaded. Potential separators between pages are only computed once both pages are loaded.
import androidx.paging.insertSeparatorsAsync
import androidx.paging.rxjava2.insertSeparatorsAsync
/*
* Create letter separators in an alphabetically sorted list.
*
* For example, if the input is:
* "apple", "apricot", "banana", "carrot"
*
* The operator would output:
* "A", "apple", "apricot", "B", "banana", "C", "carrot"
*/
pagingDataStream.map { pagingData ->
// map outer stream, so we can perform transformations on each paging generation
pagingData.insertSeparatorsAsync(
AsyncFunction<AdjacentItems<String>, String?> {
Futures.submit(
Callable<String?> {
val (before, after) = it!!
if (after != null && before?.first() != after.first()) {
// separator - after is first item that starts with its first letter
after.first().uppercaseChar().t