平坦窗口/缓冲区上的所有可观察对象

时间:2016-12-02 09:02:30

标签: rx-java

我正在尝试使用窗口/缓冲区运算符,但我最终遇到了同样的问题。由于缓冲区和窗口返回一个可观察的每个emition,我最终得到Observable<ArrayList<String>>,但我需要一个List<Integer>

知道如何平放所有这些可观察物吗?

@Test
public void test() {
    Integer[] numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
     Observable.from(numbers)
            .window(4)
            .flatMap(ns -> ns
                    .map(number -> "uniqueKey=" + number + "&")
                    .reduce("", String::concat))
            .map(query -> query.substring(0, query.length() - 1))
            .collect(ArrayList<String>::new, List::add); //-> Given an error since it´s an Observable<ArrayList<String>>

}

如果我订阅了observable并且我在外部列表中添加了每个元素,那么这不是理想的。

.map(query -> query.substring(0, query.length() - 1))
            .subscribe(elements::add);
  

更新:

由于我无法删除问题,只需确认明确获取项目的唯一方法是订阅或toBlocking。

我想我现在花了太多时间用Stream()掌上图标!

问候。

1 个答案:

答案 0 :(得分:2)

这是预期的行为,因为所有运算符都返回Observable。如果您需要阻止代码完成,可以使用.toBlocking().first()