From 25cb844eb04da8ff5a1ddcb345e821d5d6f71e76 Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Mon, 6 Jun 2016 22:00:04 +0300 Subject: [PATCH] removing duplicates logic added --- .../loadable/LoadingGrowingList.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingGrowingList.java b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingGrowingList.java index 3d6d3a9..a0d87f9 100644 --- a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingGrowingList.java +++ b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingGrowingList.java @@ -22,7 +22,9 @@ package ru.touchin.roboswag.core.observables.collections.loadable; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.NoSuchElementException; import ru.touchin.roboswag.core.log.Lc; @@ -51,6 +53,7 @@ public class LoadingGrowingList> private final BehaviorSubject haveMoreItems = BehaviorSubject.create(true); @NonNull private final ObservableList innerList = new ObservableList<>(); + private boolean removeDuplicates; public LoadingGrowingList(@NonNull final LoadingRequestCreator loadingMoreRequestCreator) { super(); @@ -71,6 +74,10 @@ public class LoadingGrowingList> return haveMoreItems.distinctUntilChanged(); } + public void setIsRemoveDuplicates(final boolean removeDuplicates) { + this.removeDuplicates = removeDuplicates; + } + @NonNull private Observable getLoadMoreObservable() { return Observable @@ -90,7 +97,11 @@ public class LoadingGrowingList> }) .doOnNext(loadedItems -> { loadingMoreConcreteObservable = null; - innerList.addAll(loadedItems.getItems()); + final List items = new ArrayList<>(loadedItems.getItems()); + if (removeDuplicates) { + removeDuplicatesFromList(items); + } + innerList.addAll(items); haveMoreItems.onNext(loadedItems.haveMoreItems()); }) .replay(1) @@ -102,6 +113,16 @@ public class LoadingGrowingList> .subscribeOn(scheduler); } + private void removeDuplicatesFromList(@NonNull final List items) { + for (int i = items.size() - 1; i >= 0; i--) { + for (int j = 0; j < innerList.size(); j++) { + if (innerList.get(j).equals(items.get(i))) { + items.remove(i); + } + } + } + } + @Override public int size() { return innerList.size(); @@ -139,8 +160,7 @@ public class LoadingGrowingList> } public void reset(@NonNull final Collection initialItems) { - innerList.clear(); - innerList.addAll(initialItems); + innerList.set(initialItems); haveMoreItems.onNext(true); }