【问题标题】:"Split"/ "generate" operation in sequence?依次“拆分”/“生成”操作?
【发布时间】:2014-09-04 14:32:41
【问题描述】:

我正在尝试在 RxJava 中找到适合下一个序列操作的操作:

[A], [B], [C] -> Aa, Ab, Ac, Ba, Bb, Bc, Ca, Cb, Cc

实际用例是我有一个 Observable,其中包含一个项目列表,我试图将这些项目转换为 Observable,从列表中发射扁平项目。

像这样:

Observable<List<Item>> ---> Observable<Item>

我似乎找不到合适的 RxJava 操作来执行类似的操作 - 有 flatMap() 与我想要的完全相反,但没有“生成”或“mapToMany”操作。我错过了什么?

【问题讨论】:

    标签: system.reactive rx-java


    【解决方案1】:

    flatMap() 听起来确实像您正在寻找的东西:

    // This assumes that generating originalObservable is not under your control
    // and is returned from some other API call you are making.
    List<Item> originalList = Arrays.asList(new Item(), new Item(), new Item());
    Observable<List<Item>> originalObservable = Observable.just(originalList);
    
    Observable<Item> itemObservable =
            originalObservable
                    .flatMap(new Func1<List<Item>, Observable<Item>>() {
                        @Override
                        public Observable<Item> call(List<Item> items) {
                            return Observable.from(items);
                        }
                    });
    

    如果您实际上可以访问 originalList(而不是通过其他 API 调用访问 originalObservable),您可以使用 from() 从中创建 Observable:

    Observable<Item> itemObservable = Observable.from(originalList);
    

    我不确定这与您的原始序列([A]、[B]、[C] -> Aa、Ab、Ac、Ba、Bb、Bc、Ca、Cb、Cc)有何关系,因为我' m 不知道小 a、b 和 c 是从哪里来的。如果它们是不需要大写 A、B 和 C 来生成它们的独立值,那么 flatMap() 就是你想要的。

    Observable<String> result =
            Observable
                    .just("A", "B", "C")
                    .flatMap(new Func1<String, Observable<String>>() {
                        @Override
                        public Observable<String> call(String s) {
                            return Observable
                                    .just(s + "a", s + "b", s + "c");
                        }
                    });
    

    【讨论】:

    • 是的,我认为我解释得很糟糕 - 我有一系列项目列表,我想将其展平为这些列表中的连续项目序列。看来 flatMap 可能正是我想要的,我只是误解了文档。
    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多