如何用 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。
我不断收到 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。