Skip to content

Instantly share code, notes, and snippets.

@ErikHellman
Created April 2, 2017 13:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ErikHellman/c76bff4bc8daf8cb9931d98bf892e151 to your computer and use it in GitHub Desktop.
Save ErikHellman/c76bff4bc8daf8cb9931d98bf892e151 to your computer and use it in GitHub Desktop.
RxJava & DiffUtil
private void subscribeToData() {
Flowable<List<Data>> dataLists = Flowable
.interval(0, 3, TimeUnit.SECONDS, Schedulers.computation())
.map(val -> {
Log.d(TAG, "Shuffling original list...");
return Data.shuffle(originalList).subList(0, (int) (0.8 * originalList.size()));
})
.share();
Flowable<List<Data>> startWith = dataLists
.startWith(new ArrayList<Data>(originalList));
this.disposable = Flowable
.zip(startWith, dataLists, (current, next) -> {
Log.d(TAG, "Calculate diff result...");
MyCallback callback = new MyCallback(current, next);
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(callback, true);
return Pair.create(diffResult, next);
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(diffResultListPair -> {
Log.d(TAG, "Update adapter!");
adapter.setDataList(diffResultListPair.second);
diffResultListPair.first.dispatchUpdatesTo(adapter);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment