我正在尝试使用窗口/缓冲区运算符,但我最终遇到了同样的问题。由于缓冲区和窗口返回一个可观察的每个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()掌上图标!
问候。
答案 0 :(得分:2)
这是预期的行为,因为所有运算符都返回Observable
。如果您需要阻止代码完成,可以使用.toBlocking().first()