tmn*_*tmn 11 java reactive-programming rx-java
假设我有两个可以在任何时刻发出值的无限Observable.他们结合起来创造了一个Observable<ProcessFileEvent>.
Observable<Integer> selectedFileId= ...
Observable<MouseClick> buttonClick = ...
Observable<ProcessFileEvent> `processFileEvent` = Observable.combineLatest(selectedFileId, buttonClick, (s,b) -> {
//create ProcessFileEvent here
});
Run Code Online (Sandbox Code Playgroud)
问题是我只希望processFileEvent在发出内容时buttonClick发出,而不是selectedFileId.这绝对不是用户在输入文件ID时所期望的行为并且它开始了ProcessFileEvent.我如何组合,但只在发出时buttonClick发出?
pau*_*els 14
Observable<Integer> selectedFileId= ...
Observable<MouseClick> buttonClick = ...
Observable<ProcessFileEvent> processFileEvent = buttonClick.withLatestFrom(selectedFieldId, (b,s) -> {
//create ProcessFileEvent here
});
Run Code Online (Sandbox Code Playgroud)
它仅在第一次Observable 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后
Observable.combineLatest(selectedFileId, buttonClick,
(s,b) -> new FileMouseClick(s,b))
.distinctUntilChanged(f -> f.mouseClick)
.map(toProcessFileEvent())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3725 次 |
| 最近记录: |