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);