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

how to replace an rx java expression with lambda?

我不断收到 expression can be replaced with a lambda for Java 8. 我该怎么做?这是我收到该消息的表达式之一:

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

有什么想法吗?

由于任何具有 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 并从那里重新抛出异常。

这是为此创建的 lambda 的方式:

observableEmitter -> {
    // your code here
}

您不需要匿名函数或类似的东西。

将其放入给定的代码中:

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

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