可观察的,访问列表中的输入
Observable, access the input from the list
刚接触 rx java。
我有一个这样的代码,其中有一个事件列表,我需要执行一个操作,然后将响应与调用的事件相匹配。
我在线上遇到编译错误:
.subscribe(value -> matchResponse(event, value));
当然有道理,此时事件未知,有没有办法让我访问传递给 performOperation 函数的事件,以便我可以执行我的匹配响应。
public void perforomObservableOperations(List<Event> events) {
Observable.from(events)
.flatMap(this::performOperation, 10)
.retry(10)
.toBlocking()
.subscribe(value -> matchResponse(event, value));
}
private void matchResponse(Event event, Integer value) {
eboxEvent.setValue(value);
}
private Observable<Integer> performOperation(Event event) {
if (event == null) {
return Observable.empty();
}
return xyz.getValue(event).toObservable();
}
如果有更好的方法,我很想知道。本质上是使用 rxjava 来帮助我重试,xyz
是一个 hystrix 对象,使我能够打开断路器。
您可以创建一个简单的 class 来存储 event
和 value
:
class Store {
Event event;
Integer value;
Store(Event event, Integer value) {
this.event = event;
this.value = value;
}
}
您也可以使用 Pair
、Map.Entry
或类似的名称。然后你必须以适当的方式更改performOperation
和matchResponse
:
private void matchResponse(Store store) {
}
private Observable<Store> performOperation(Event event) {
if (event == null) {
return Observable.empty();
}
return xyz.getValue(event).toObservable().map((value) -> new Store(event, value));
}
刚接触 rx java。
我有一个这样的代码,其中有一个事件列表,我需要执行一个操作,然后将响应与调用的事件相匹配。
我在线上遇到编译错误:
.subscribe(value -> matchResponse(event, value));
当然有道理,此时事件未知,有没有办法让我访问传递给 performOperation 函数的事件,以便我可以执行我的匹配响应。
public void perforomObservableOperations(List<Event> events) {
Observable.from(events)
.flatMap(this::performOperation, 10)
.retry(10)
.toBlocking()
.subscribe(value -> matchResponse(event, value));
}
private void matchResponse(Event event, Integer value) {
eboxEvent.setValue(value);
}
private Observable<Integer> performOperation(Event event) {
if (event == null) {
return Observable.empty();
}
return xyz.getValue(event).toObservable();
}
如果有更好的方法,我很想知道。本质上是使用 rxjava 来帮助我重试,xyz
是一个 hystrix 对象,使我能够打开断路器。
您可以创建一个简单的 class 来存储 event
和 value
:
class Store {
Event event;
Integer value;
Store(Event event, Integer value) {
this.event = event;
this.value = value;
}
}
您也可以使用 Pair
、Map.Entry
或类似的名称。然后你必须以适当的方式更改performOperation
和matchResponse
:
private void matchResponse(Store store) {
}
private Observable<Store> performOperation(Event event) {
if (event == null) {
return Observable.empty();
}
return xyz.getValue(event).toObservable().map((value) -> new Store(event, value));
}