假设我有两个无限的Observable,它们随时都可以发出值。它们结合在一起以创建Observable<ProcessFileEvent>
。
Observable<Integer> selectedFileId= ...
Observable<MouseClick> buttonClick = ...
Observable<ProcessFileEvent> `processFileEvent` = Observable.combineLatest(selectedFileId, buttonClick, (s,b) -> {
//create ProcessFileEvent here
});
问题是我只希望当
buttonClick
发出某种东西而不是selectedFileId
时发出processFileEvent。输入文件ID并启动ProcessFileEvent
时,这绝对不是用户期望的行为。如何合并但仅在buttonClick
发出时发出? 最佳答案
在.distinctUntilChanged()
对象上使用MouseClick
。这样,您只会在MouseClick
更改时获得事件。
创建一个同时包含fileId
和mouseClick
的类:
static class FileMouseClick {
final int fileId;
final MouseClick mouseClick;
FileMouseClick(int fileId, MouseClick mouseClick) {
this.fileId = fileId;
this.mouseClick = mouseClick;
}
}
然后
Observable.combineLatest(selectedFileId, buttonClick,
(s,b) -> new FileMouseClick(s,b))
.distinctUntilChanged(f -> f.mouseClick)
.map(toProcessFileEvent())