У меня есть наблюдаемое, которое испускает один объект с двумя полями, примерно так:

public class Details {
    private Link link;
    private List<Comment> comments;
}

Observable<Details> detailsObservable = ...;

Теперь мне было интересно: можно ли как-то разделить эту наблюдаемую на две наблюдаемые? Я бы хотел, чтобы один подписчик слушал link, а другой - Comment.

3
manabreak 9 Янв 2017 в 10:32

1 ответ

Лучший ответ

Для этого вы можете использовать метод карты. Пример кода представлен ниже, дайте мне знать, если это поможет.

public static void main(String[] args) {
    Observable<Details> dObs = Observable.just(new Details("a", "c"));
    Observable<String> lObs = dObs.map(d -> d.link);
    Observable<String> cObs = dObs.map(d -> d.comments);
    lObs.subscribe(s -> System.out.println(s));
    cObs.subscribe(s -> System.out.println(s));
}


static class Details {
    String link;
    String comments;

    public Details(String link, String comments) {
        this.link = link;
        this.comments = comments;
    }
}
2
Pavan Kumar 9 Янв 2017 в 10:56
1
Не забудьте использовать либо share(), либо publish() и connect() на основе наблюдаемого dObs В противном случае он испустит Details дважды
 – 
grine4ka
23 Мар 2018 в 15:52