RxJava:是否可以避免toBlocking()。single()?

我有时使用RxJava来为一些复杂的过滤器,映射等写一个更实用的风格(我知道这不是它所做的,我会很乐意使用Kotlin或Java 8,但是我可以“吨(我在Android上,所以坚持到6)。

但是,当你试图从Observable中“抽取”实际的对象时,你总是需要写.toList().toBlocking().singe()

例如(不那么复杂,但你明白了):

 final List<CashRegister> cashRegisters = cashRegisterData.getCashRegisters(); return Observable.from(cashRegisters) .map(CashRegister::getName) .toList() .toBlocking() .single(); 

正如你所看到的,将Observable“转换”成一个列表需要比我想要执行的实际映射更多的行。

有没有toList().toBlocking().single()链做到这一点?

您可以使用IxJava执行相同的操作:

 final List<CashRegister> cashRegisters = cashRegisterData.getCashRegisters(); return ix.Ix.from(cashRegisters) .map(CashRegister::getName) .toList(); 

RxJava必须改变他们使用Observable的思维方式。 可观察的运营链应该更像是一个数学公式,而不是一系列的操作。 所以,不要试图从可观察到的结果中获得结果,而是试图找出你想要做的事情。

在RxJava中,不要extract可观察的值,而是subscribe它们:

 someObservable.subscribe(result -> { // Now do your deed with the result // for example: someAdapter.setData(result); someAdapter.notifyDatasetChanged(); }) 

我建议阅读关于如何使用RxJava来理解这个想法的文档。