Rx java 在窗口/缓冲区上平放所有观察值

Rx java 在窗口/缓冲区上平放所有观察值,rx-java,Rx Java,我试图使用窗口/缓冲区操作符,但最终还是遇到了同样的问题。由于缓冲区和窗口每次发射都返回一个可观察的,因此我的返回中有一个可观察的,但我需要一个列表 你知道如何把所有的可见光变平吗 @Test public void test() { Integer[] numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; Observable.from(numbers) .window(4) .flatMa

我试图使用窗口/缓冲区操作符,但最终还是遇到了同样的问题。由于缓冲区和窗口每次发射都返回一个可观察的,因此我的返回中有一个
可观察的
,但我需要一个
列表

你知道如何把所有的可见光变平吗

@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>>

}
更新:

因为我不能排除这个问题,所以请确认发出该项的唯一方法显然是订阅或toBlocking

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


注意。

这是预期的行为,因为所有操作符都返回可观察的
。如果您需要在代码完成之前阻止,您可以使用
.toBlocking().first()

谢谢您的回答,但正如我在回答中所说的,如果必须等待,我会使用subscribe,据我所知,使用.toBlocking().first()这是一种反模式,只有在测试场景中才应该使用该选项。如果您想要接收
列表
,您需要订阅一个
可观察的
,并将其放入
onNext()
或块中。还有
forEach
操作符,但您需要一个外部
列表,因为它返回void。
.map(query -> query.substring(0, query.length() - 1))
            .subscribe(elements::add);