blob: 11f72090c29e5f96751c04b192cd9a67571efa66 [file] [log] [blame]
<html devsite="true">
<head>
<title>PagingData.Companion</title>
{% setvar book_path %}/reference/androidx/_book.yaml{% endsetvar %}
{% include "_shared/_reference-head-tags.html" %}
</head>
<body>
<h1>PagingData.Companion</h1>
{% setvar page_path %}androidx/paging/PagingData.Companion.html{% endsetvar %}
{% setvar can_switch %}1{% endsetvar %}
{% include "reference/_java_switcher2.md" %}
<p>
<pre>object PagingData.Companion</pre>
</p>
<hr>
<h2>Summary</h2>
<div class="devsite-table-wrapper">
<table class="responsive">
<thead>
<tr>
<th colspan="2"><h3>Public methods</h3></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>final <a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;T&gt;</code></td>
<td width="100%">
<div><code>&lt;T&nbsp;extends&nbsp;<a href="/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/PagingData.Companion.html#empty()">empty</a>()</code></div>
<p>Create a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> that immediately displays an empty list of items when submitted to androidx.paging.AsyncPagingDataAdapter.</p>
</td>
</tr>
<tr>
<td><code>final <a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;T&gt;</code></td>
<td width="100%">
<div><code>&lt;T&nbsp;extends&nbsp;<a href="/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/PagingData.Companion.html#from(kotlin.collections.List)">from</a>(<a href="/reference/java/util/List.html">List</a>&lt;T&gt;&nbsp;data)</code></div>
<p>Create a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> that immediately displays a static list of items when submitted to androidx.paging.AsyncPagingDataAdapter.</p>
</td>
</tr>
<tr>
<td><code>final <a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;R&gt;</code></td>
<td width="100%">
<div><code>&lt;T&nbsp;extends&nbsp;R,&nbsp;R&nbsp;extends&nbsp;<a href="/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/PagingData.Companion.html#insertSeparators(androidx.paging.PagingData,kotlin.Function2)">insertSeparators</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;T&gt;&nbsp;pagingData,<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="/reference/kotlin/jvm/functions/Function2.html">Function2</a>&lt;T,&nbsp;T,&nbsp;R&gt;&nbsp;generator<br>)</code></div>
<p>Returns a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> containing each original element, with an optional separator generated by <code><a href="/reference/androidx/paging/PagingData.Companion.html#generator()">generator</a></code>, given the elements before and after (or null, in boundary conditions).</p>
</td>
</tr>
</tbody>
</table>
</div>
<h2>Public methods</h2>
<div><a name="empty--"></a>
<h3 class="api-name" id="empty()">empty</h3>
<pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;T&gt;&nbsp;&lt;T&nbsp;extends&nbsp;<a href="/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/PagingData.Companion.html#empty()">empty</a>()</pre>
<p>Create a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> that immediately displays an empty list of items when submitted to <a href="[androidx.paging.AsyncPagingDataAdapter]">androidx.paging.AsyncPagingDataAdapter</a>.</p>
</div>
<div><a name="from-kotlin.collections.List-"></a>
<h3 class="api-name" id="from(kotlin.collections.List)">from</h3>
<pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;T&gt;&nbsp;&lt;T&nbsp;extends&nbsp;<a href="/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/PagingData.Companion.html#from(kotlin.collections.List)">from</a>(<a href="/reference/java/util/List.html">List</a>&lt;T&gt;&nbsp;data)</pre>
<p>Create a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> that immediately displays a static list of items when submitted to <a href="[androidx.paging.AsyncPagingDataAdapter]">androidx.paging.AsyncPagingDataAdapter</a>.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<thead>
<tr>
<th colspan="2">Parameters</th>
</tr>
</thead>
<tbody>
<tr>
<td><code><a href="/reference/java/util/List.html">List</a>&lt;T&gt;&nbsp;data</code></td>
<td width="100%">
<p>Static list of <code><a href="/reference/androidx/paging/PagingData.Companion.html#from(kotlin.collections.List)">T</a></code> to display.</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div><a name="insertSeparators(androidx.paging.PagingData, kotlin.Function2)"></a><a name="insertSeparators-androidx.paging.PagingData-kotlin.Function2-"></a>
<h3 class="api-name" id="insertSeparators(androidx.paging.PagingData,kotlin.Function2)">insertSeparators</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/[JVM root]/&lt;ERROR CLASS&gt;.html">&lt;ERROR CLASS&gt;</a><br>public&nbsp;final&nbsp;<a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;R&gt;&nbsp;&lt;T&nbsp;extends&nbsp;R,&nbsp;R&nbsp;extends&nbsp;<a href="/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/PagingData.Companion.html#insertSeparators(androidx.paging.PagingData,kotlin.Function2)">insertSeparators</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="/reference/androidx/paging/PagingData.html">PagingData</a>&lt;T&gt;&nbsp;pagingData,<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="/reference/kotlin/jvm/functions/Function2.html">Function2</a>&lt;T,&nbsp;T,&nbsp;R&gt;&nbsp;generator<br>)</pre>
<p>Returns a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> containing each original element, with an optional separator generated by <code><a href="/reference/androidx/paging/PagingData.Companion.html#generator()">generator</a></code>, given the elements before and after (or null, in boundary conditions).</p>
<p>Note that this transform is applied asynchronously, as pages are loaded. Potential separators between pages are only computed once both pages are loaded.</p>
<p><b>Kotlin callers should instead use the extension function <code><a href="/reference/androidx/paging/PagingData.Companion.html#insertSeparators(androidx.paging.PagingData,kotlin.Function2)">insertSeparators</a></code></b></p>
<pre class="prettyprint">/*<br> * Create letter separators in an alphabetically sorted list.<br> *<br> * For example, if the input is:<br> * &quot;apple&quot;, &quot;apricot&quot;, &quot;banana&quot;, &quot;carrot&quot;<br> *<br> * The operator would output:<br> * &quot;A&quot;, &quot;apple&quot;, &quot;apricot&quot;, &quot;B&quot;, &quot;banana&quot;, &quot;C&quot;, &quot;carrot&quot;<br> */<br>pagingDataStream.map((pagingData) -&gt;<br> // map outer stream, so we can perform transformations on each paging generation<br> PagingData.insertSeparators(pagingData,<br> (@Nullable String before, @Nullable String after) -&gt; {<br> if (after != null &amp;&amp; (before == null<br> || before.charAt(0) != after.charAt(0))) {<br> // separator - after is first item that starts with its first letter<br> return Character.toString(Character.toUpperCase(after.charAt(0)));<br> } else {<br> // no separator - either end of list, or first<br> // letters of items are the same<br> return null;<br> }<br> }));<br><br>/*<br> * Create letter separators in an alphabetically sorted list of Items, with UiModel objects.<br> *<br> * For example, if the input is (each an `Item`):<br> * &quot;apple&quot;, &quot;apricot&quot;, &quot;banana&quot;, &quot;carrot&quot;<br> *<br> * The operator would output a list of UiModels corresponding to:<br> * &quot;A&quot;, &quot;apple&quot;, &quot;apricot&quot;, &quot;B&quot;, &quot;banana&quot;, &quot;C&quot;, &quot;carrot&quot;<br> */<br>pagingDataStream.map((itemPagingData) -&gt; {<br> // map outer stream, so we can perform transformations on each paging generation<br><br> // first convert items in stream to UiModel.Item<br> PagingData&lt;UiModel.ItemModel&gt; itemModelPagingData =<br> itemPagingData.map(UiModel.ItemModel::new);<br><br> // Now insert UiModel.Separators, which makes the PagingData of generic type UiModel<br> return PagingData.insertSeparators(<br> itemModelPagingData,<br> (@Nullable UiModel.ItemModel before, @Nullable UiModel.ItemModel after) -&gt; {<br> if (after != null &amp;&amp; (before == null<br> || before.item.label.charAt(0) != after.item.label.charAt(0))) {<br> // separator - after is first item that starts with its first letter<br> return new UiModel.SeparatorModel(<br> Character.toUpperCase(after.item.label.charAt(0)));<br> } else {<br> // no separator - either end of list, or first<br> // letters of items are the same<br> return null;<br> }<br> });<br>});<br><br>public class UiModel {<br> static class ItemModel extends UiModel {<br> public Item item;<br> ItemModel(Item item) {<br> this.item = item;<br> }<br> }<br> static class SeparatorModel extends UiModel {<br> public char character;<br> SeparatorModel(char character) {<br> this.character = character;<br> }<br> }<br>}</pre>
</div>
</body>
</html>