假设我有两个无限的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更改时获得事件。

创建一个同时包含fileIdmouseClick的类:

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())

10-04 23:29