Rxjava Observe 流作为特定时间的列表

Rxjava Observe stream as List for Specific time

我想做什么?

我有一个 observable(dayListener),它在我第一次订阅它时从服务器发出 100 - 300 个项目(未确认可能 return 什么都没有),然后它 returns 1 后 1小时。每个项目都是 UserData

类型

什么是问题?

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

我的尝试

我不知道如何在 rxjava 2 中将 observable 转换 3 秒,因为我不能 return 两种类型用于相同的 observable,UserDataList ,所以我无法形成解决方案,任何想法真的很感激!! ,我只是 rxjava 2

的新手

只需使用 2 个不同的 Observable,无论如何你都想监听 2 个不同类型的数据。

第一个 Observable 应该有 3 秒的限制:

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

然后你有其余值的 Observable:

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

这是你想要的吗?

您可以创建一个 Pair class 并使用 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);
    }