我有时会使用RxJava为更复杂的过滤,映射等编写更多功能样式(我知道这不是它的用途,我很乐意使用Kotlin或Java 8,但是我不能(我在Android上,所以,坚持到6)。
但是,当您尝试从Observable中“提取”实际对象时,您始终需要编写.toList().toBlocking().singe()
E.g。 (不是那么复杂,但你明白了):
final List<CashRegister> cashRegisters = cashRegisterData.getCashRegisters();
return Observable.from(cashRegisters)
.map(CashRegister::getName)
.toList()
.toBlocking()
.single();
如您所见,将Observable“转换”为列表需要的行数多于我想要执行的实际映射。
有没有办法在没有toList().toBlocking().single()
链的情况下这样做?
答案 0 :(得分:1)
您可以使用IxJava执行相同的操作:
final List<CashRegister> cashRegisters = cashRegisterData.getCashRegisters();
return ix.Ix.from(cashRegisters)
.map(CashRegister::getName)
.toList();
答案 1 :(得分:1)
使用RxJava,必须改变他们使用Observable
的方式。
可观察的操作链应该更像是数学公式,而不是一系列操作。因此,不要试图从可观察的结果中获取结果,而是试着找出你想对该列表做些什么。
在RxJava中,不要extract
可观察的值,而是subscribe
给他们:
someObservable.subscribe(result -> {
// Now do your deed with the result
// for example:
someAdapter.setData(result);
someAdapter.notifyDatasetChanged();
})
我建议您阅读How to use RxJava上的文档以了解这个想法。