猿问

可观察,从列表中访问输入

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 对象。


慕哥6287543
浏览 124回答 1
1回答

繁星淼淼

您可以创建一个简单的类来存储event和value:class Store {&nbsp; &nbsp; Event event;&nbsp; &nbsp; Integer value;&nbsp; &nbsp; Store(Event event, Integer value) {&nbsp; &nbsp; &nbsp; &nbsp; this.event = event;&nbsp; &nbsp; &nbsp; &nbsp; this.value = value;&nbsp; &nbsp; }}您也可以使用Pair,Map.Entry或类似的东西来代替。那么你必须以适当的方式进行performOperation改变:matchResponseprivate void matchResponse(Store store) {}private Observable<Store> performOperation(Event event) {&nbsp; &nbsp; if (event == null) {&nbsp; &nbsp; &nbsp; &nbsp; return Observable.empty();&nbsp; &nbsp; }&nbsp; &nbsp; return xyz.getValue(event).toObservable().map((value) -> new Store(event, value));}
随时随地看视频慕课网APP

相关分类

Java
我要回答