从Filtered Observable返回最终列表

时间:2015-10-07 16:06:25

标签: java reactive-programming rx-java

我有一个

Observable<List<ObjectModel>>

我需要返回的列表是不可变的,但是由于某种原因,在应用下面的过滤器时它不是。谁能告诉我如何保持不变性?谢谢!

observable.subscribeOn(Schedulers.io())
                .flatMap(Observable::from).filter(objectModel -> {
                return objectModel.isEnabled();
            }).toList();

2 个答案:

答案 0 :(得分:3)

toList运算符会在您注意到List时发出可变java.util.ArrayList。只需将其映射到您选择的不可变列表类型即可。例如:

obs.toList()
   .map(Collections::unmodifiableList);

或使用番石榴:

obs.toList()
   .map(ImmutableList::copyOf);

答案 1 :(得分:1)

这里解释了为什么我遇到问题的答案:

http://www.javacreed.com/modifying-an-unmodifiable-list/

添加

.map(Collections::unmodifiableList)`

修好了