Rxjava将流视为特定时间列表

时间:2017-08-01 11:33:07

标签: android arraylist listener rx-java rx-java2

我想做什么?

我有一个observable(dayListener)从服务器第一次订阅时发出100 - 300项(未确认可能不返回任何内容),然后在1小时后返回1项。每个项目的类型为 UserData

有什么问题?

我想观察(dayListner)中的项目3秒并将其转换为List并存储它,然后继续观察单个项目的相同observable UserData

我的尝试

我无法弄清楚如何在rxjava 2中将observable转换为3秒,因为我无法为相同的observable返回两种类型, UserData List ,所以我无法形成解决方案任何想法真的很感激!! ,我只是 rxjava 2

的新手

2 个答案:

答案 0 :(得分:1)

只需使用2个不同的Observable,您就可以听到2种不同类型的数据。

First Observable应该有3秒的限制:

firstListObservable = userSourceObservable .takeUntil(Observable.timer(3, TimeUnit.SECONDS)) .toList()

然后你有其余值的Observable:

remainingValuesObservable = userSourceObservable .skipUntil(Observable.timer(3, TimeUnit.SECONDS))

这是你想要的吗?

答案 1 :(得分:1)

你可以创建一个Pair类并使用Zip运算符将两个结果合并到一个emmited Item

class Pair {
        String a;
        Integer b;

        Pair(String a, Integer b) {
            this.a = a;
            this.b = b;
        }
    }

    @Test
    public void testZipDifferentTypes() {
        Observable.zip(obA(), obB(), Pair::new)
                .subscribe(System.out::println);
    }

    private Observable<String> obA() {
        return Observable.just("hello");
    }

    private Observable<Integer> obB() {
        return Observable.just(1);
    }