bre*_*ine 3 java android list rx-java rx-java2
我正在尝试过滤一个列表,该列表可能是空的(或者该项不在列表中).inboxData由另一个observable填充:
private BehaviorSubject<InboxResponse> inboxData = BehaviorSubject.create();
public Observable<Item> getInboxItem(String id) {
return inboxData
.flatMap(response -> Observable.from(response.getData()))
.filter(item -> item.getId().equals(id))
.firstOrDefault(null);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果response.getData()为空,则firstOrDefault永远不会运行.但为什么?它清楚地表明,如果前面的observable没有发出任何内容,它会返回默认值.
firstOrDefault如果流完成而没有任何项目通过observable传递,则发出默认值.为您的流完成BehaviorSubject将需要信号完成.由于没有任何指示发生,它永远不会意识到它需要发送默认值.
该解决方案是移动filter和firstOrDefault向内侧flatMap所提供的列表中的这样的端部getData的端部向上完成的内流.
请注意,如果您使用RxJava2作为标记建议,null则永远不能成为流中的项目,因此将其作为默认值传递将导致异常.
| 归档时间: |
|
| 查看次数: |
2812 次 |
| 最近记录: |