RxJava сортировка списка по одну из эллементов
Имею json из такими строками как title, time, click_url, img, type, top и тд.
Я получаю список эллеметов со строками которые я описал выше.
Мне нужно Получить список эллеметов который будет иметь одинаковый тип
model.getType().equals("FAVOURITE")
а все прочие эллементы не должны попасть в этот список.
Я пробовал и Maybe и .map и .flatmap и .filter и .skip() и .contains пока что безуспешно.
Вот модель
public class Model {
@SerializedName("title")
private String title;
@SerializedName("type")
private String type;
@SerializedName("img")
private String img;
@SerializedName("click_url")
private String click_url;
@SerializedName("time")
private String time;
public Model(String title, String img, String click_url, String time, String type) {
this.title = title;
this.type = type;
this.img = img;
this.click_url = click_url;
this.time = time;
}
public String getTitle() {
return title;
}
public String getType() {
return type;
}
public String getImg() {
return img;
}
public String getClick_url() {
return click_url;
}
public String getTime() {
return time;
}
}
вот rxjava кусок кода
private final CompositeDisposable disposable = new CompositeDisposable();
private void fetchData() {
disposable.add(iGetterJSON.getList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(unsortedList -> {
List<Model> sortedList = new ArrayList<>(unsortedList.size());
Collections.copy(sortedList, unsortedList);
Collections.sort(sortedList, new Model.MyComparator());
return sortedList;
})
.subscribe((Consumer<List<Model>>) this::initRecyclerView));
}
интерфейс для Retrofit2
@GET("/")
Observable<List<Model>> getList();
Мой компаратор но как мне получить имменно тот список что мне нада я так и не понял(
public static class MyComparator implements Comparator<Model> {
@Override
public int compare(Model model, Model t1) {
if (model.getType().equals(TYPE_FAVOURITES)){
return 1;
} else if (model.getType().equals(TYPE_STORIES)){
return 2;
} else if (model.getType().equals(TYPE_VIDEO)){
return 3;
} else {
return 0;
}
}
}
Ответы (1 шт):
Автор решения: ЮрийСПб
→ Ссылка
Вам надо поменять данные в источнике данных. Для этого есть оператор map. В нём можно стандартными средствами отсортировать список. Примерно так:
.map { list ->
Collections.sort(list, Comparator { c1, c2 -> c1.type.compareTo(c2.type) })
}