我想收集Collection中发出的每个项目。我是这样做的:
List found = new ArrayList();
controller.search(query)
.doOnCompleted(new Action0() {
@Override
public void call() {
//Do something with "found" list
}
}).subscribe(new Action1<String>() {
@Override
public void call(String item) {
found.add(item);
}
});
是否有RxJava内置方式来实现这一目标?
答案 0 :(得分:4)
使用toList
收集发出的字符串,并在observable完成时将它们作为单个列表发出。
controller.search(query)
.toList()
.subscribe(new Action1<List<String>>() {
@Override
public void call(List<String> found) {
// Do something with the list
}
});
答案 1 :(得分:2)
如果您的搜索查询返回一个集合,您可以使用扫描运算符为每个发出的项目合并列表。
@Test
public void collectCollections() {
Observable.from(Arrays.asList(1, 2, 3))
.map(Arrays::asList)
.scan(new ArrayList<Integer>(), (l1, l2) -> {
l1.addAll(l2);
return l1;
}).subscribe(System.out::println);
}
您可以在此处查看更多示例https://github.com/politrons/reactive