removing duplicates logic added

This commit is contained in:
Gavriil Sitnikov 2016-06-06 22:00:04 +03:00
parent 62b31bb965
commit 25cb844eb0
1 changed files with 23 additions and 3 deletions

View File

@ -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<TItemId, TItem extends ItemWithId<TItemId>>
private final BehaviorSubject<Boolean> haveMoreItems = BehaviorSubject.create(true);
@NonNull
private final ObservableList<TItem> innerList = new ObservableList<>();
private boolean removeDuplicates;
public LoadingGrowingList(@NonNull final LoadingRequestCreator<TItem, TItemId> loadingMoreRequestCreator) {
super();
@ -71,6 +74,10 @@ public class LoadingGrowingList<TItemId, TItem extends ItemWithId<TItemId>>
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<TItemId, TItem extends ItemWithId<TItemId>>
})
.doOnNext(loadedItems -> {
loadingMoreConcreteObservable = null;
innerList.addAll(loadedItems.getItems());
final List<TItem> 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<TItemId, TItem extends ItemWithId<TItemId>>
.subscribeOn(scheduler);
}
private void removeDuplicatesFromList(@NonNull final List<TItem> 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<TItemId, TItem extends ItemWithId<TItemId>>
}
public void reset(@NonNull final Collection<TItem> initialItems) {
innerList.clear();
innerList.addAll(initialItems);
innerList.set(initialItems);
haveMoreItems.onNext(true);
}