RxJava - toList并仍然发出多个项目

时间:2017-10-22 16:12:36

标签: rx-java rx-java2

如何追随:

Observable<Data> obs = ...;
List<Data> data = obs
    .toList()
    .toObservable()
    .singleOrError() // <= this line throws the exception
    .blockingGet();

我的代码有时会抛出java.lang.IllegalArgumentException: Sequence contains more than one element!。难道我不总是在我的情况下获得单个List<Data>元素(或null)但从不多个元素?

3 个答案:

答案 0 :(得分:1)

由于toList在RxJava2中返回Single,因此异常应该是不可能的。所以它可能是由上游没有正确实现Rx协议的东西造成的。

我建议在doOnNexttoObservable之间添加singleOrError日志记录调用,以了解这种潜在的第二次排放是什么。

答案 1 :(得分:0)

我很好奇,你为什么要使用.toList(),其中返回是一个Single,然后将其更改为一个observable,只是为了检查它是单个还是出错?

为什么不这样做:

Observable<Data> obs = ...;
List<Data> data = obs
    .toList()
    .blockingGet();
P.S:我知道我的回答可能是错的。如果是这样的话,请纠正我,但我想发布它,因为评论不允许正确格式化。

答案 2 :(得分:0)

您应该使用 .firstOrError bcos .singleOrError 不期望来自上游的新项目。并且失败了。特别是如果您在那里有列表。