{% setvar book_path %}/reference/androidx/_book.yaml{% endsetvar %} {% include "_shared/_reference-head-tags.html" %}
public final class PagingDataFutures
Public methods |
|
---|---|
static final @<ERROR CLASS> @NonNull PagingData<@NonNull T> |
<T extends Object> filter( Returns a |
static final @<ERROR CLASS> @NonNull PagingData<@NonNull R> |
<T extends Object, R extends Object> flatMap( Returns a |
static final @<ERROR CLASS> @NonNull PagingData<@NonNull R> |
<T extends R, R extends Object> insertSeparators( Returns a |
static final @<ERROR CLASS> @NonNull PagingData<@NonNull R> |
<T extends Object, R extends Object> map( Returns a |
@<ERROR CLASS>
@NonNull
public static final @<ERROR CLASS> PagingData<@NonNull T> <T extends Object> filter(
@NonNull PagingData<@NonNull T> receiver,
@NonNull <ERROR CLASS><@NonNull T, @NonNull Boolean> predicate,
@NonNull Executor executor
)
Returns a PagingData
containing only elements matching the given predicate
.
Parameters | |
---|---|
@NonNull <ERROR CLASS><@NonNull T, @NonNull Boolean> predicate |
AsyncFunction returning |
@NonNull Executor executor |
|
@<ERROR CLASS>
@NonNull
public static final @<ERROR CLASS> PagingData<@NonNull R> <T extends Object, R extends Object> flatMap(
@NonNull PagingData<@NonNull T> receiver,
@NonNull <ERROR CLASS><@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 <ERROR CLASS><@NonNull T, @NonNull Iterable<@NonNull R>> transform |
AsyncFunction to transform an item of type |
@NonNull Executor executor |
|
@<ERROR CLASS>
@NonNull
public static final @<ERROR CLASS> PagingData<@NonNull R> <T extends R, R extends Object> insertSeparators(
@NonNull PagingData<@NonNull T> receiver,
@NonNull <ERROR CLASS><@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().toUpperCase().toString() } else { // no separator - either end of list, or first letters of before/after are the same null } }, executor ) }, executor ) }
import androidx.paging.insertSeparatorsAsync import androidx.paging.map import androidx.paging.rxjava2.insertSeparatorsAsync open class UiModel data class ItemUiModel(val item: Item) : UiModel() data class SeparatorUiModel(val char: Char) : UiModel() /* * Create letter separators in an alphabetically sorted list of Items, with UiModel objects. * * For example, if the input is (each an `Item`): * "apple", "apricot", "banana", "carrot" * * The operator would output a list of UiModels corresponding to: * "A", "apple", "apricot", "B", "banana", "C", "carrot" */ pagingDataStream.map { pagingData -> // map outer stream, so we can perform transformations on each paging generation pagingData .map { item -> ItemUiModel(item) // convert items in stream to ItemUiModel } .insertSeparatorsAsync( AsyncFunction<AdjacentItems<ItemUiModel>, UiModel?> { Futures.submit( Callable<UiModel> { val (before, after) = it!! if (after != null && before?.item?.label?.first() != after.item.label.first() ) { // separator - after is first item that starts with its first letter SeparatorUiModel(after.item.label.first().toUpperCase()) } else { // no separator - either end of list, or first letters of before/after are the same null } }, executor ) }, executor ) }
Parameters | |
---|---|
@NonNull <ERROR CLASS><@NonNull AdjacentItems<@NonNull T>, @NonNull R> generator |
AsyncFunction used to generate separator between two |
@NonNull Executor executor |
|
@<ERROR CLASS>
@NonNull
public static final @<ERROR CLASS> PagingData<@NonNull R> <T extends Object, R extends Object> map(
@NonNull PagingData<@NonNull T> receiver,
@NonNull <ERROR CLASS><@NonNull T, @NonNull R> transform,
@NonNull Executor executor
)
Returns a PagingData
containing the result of applying the given transform
to each element, as it is loaded.
Parameters | |
---|---|
@NonNull <ERROR CLASS><@NonNull T, @NonNull R> transform |
AsyncFunction to transform an item of type |
@NonNull Executor executor |
|