如何用lambda替换rx java表达式?

时间:2017-11-14 21:25:55

标签: android lambda java-8 rx-java rx-java2

我不断得到表达式可以替换为Java 8的lambda。我该怎么做?这是我收到该消息的表达式之一:

Observable.create(new ObservableOnSubscribe<Pair>() {
            @Override
            public void subscribe(@io.reactivex.annotations.NonNull ObservableEmitter<Pair> observableEmitter) throws Exception { ...

任何想法?

2 个答案:

答案 0 :(得分:2)

由于任何具有SAM的接口本质上都是一个功能接口,因此我们可以这样做:

Observable.create(e -> { /* do logic */ });

请注意,如果在create范围内发生任何异常,则上述方法不会冒泡异常。要使用lambdas(匿名函数)完成此类行为,您可以创建一个包装器方法并在那里执行逻辑,即:

public void subscribeWrapper(ObservableEmitter<Pair> e) throws java.lang.Exception {
    // do logic
}

然后你会这样做:

Observable.create(e -> subscribeWrapper(e));

另一方面,您可以忽略创建所述方法并在lambda语句块中使用try/catch并从那里重新抛出异常。

答案 1 :(得分:2)

这就是创建lambda的方法:

observableEmitter -> {
    // your code here
}

您不需要匿名功能或类似的功能。

将它放在给定的代码中:

Observable.create(observableEmitter -> {
    // your code here
});

您只需将new ObservableOnSubs...位替换为lambda。