Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何用lambda替换rx java表达式?_Android_Lambda_Java 8_Rx Java_Rx Java2 - Fatal编程技术网

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

Android 如何用lambda替换rx java表达式?,android,lambda,java-8,rx-java,rx-java2,Android,Lambda,Java 8,Rx Java,Rx Java2,我一直认为表达式可以替换为用于Java8的lambda。我该怎么办?下面是我从中得到这条信息的一个表达方式: Observable.create(new ObservableOnSubscribe<Pair>() { @Override public void subscribe(@io.reactivex.annotations.NonNull ObservableEmitter<Pair> observableEmitt

我一直认为表达式可以替换为用于Java8的lambda。我该怎么办?下面是我从中得到这条信息的一个表达方式:

Observable.create(new ObservableOnSubscribe<Pair>() {
            @Override
            public void subscribe(@io.reactivex.annotations.NonNull ObservableEmitter<Pair> observableEmitter) throws Exception { ...
Observable.create(新建ObservableOnSubscribe(){
@凌驾
public void subscribe(@io.reactivex.annotations.NonNull ObservableMitter ObservableMitter)引发异常{。。。

有什么想法吗?

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

Observable.create(e -> { /* do logic */ });
请注意,如果在
create
范围内发生异常,则上述方法不会引发异常。要使用lambdas(匿名函数)完成此类行为,您可以创建包装器方法并在其中执行逻辑,即:

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

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

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

Observable.create(e -> { /* do logic */ });
请注意,如果在
create
范围内发生异常,则上述方法不会引发异常。要使用lambdas(匿名函数)完成此类行为,您可以创建包装器方法并在其中执行逻辑,即:

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

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

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

observableEmitter -> {
    // your code here
}
你不需要匿名函数或类似的东西

将其放入给定代码中:

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

您只需用lambda替换
新的observeOnSubs…
位。

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

observableEmitter -> {
    // your code here
}
你不需要匿名函数或类似的东西

将其放入给定代码中:

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


你只需用lambda替换
新的observeOnSubs…
位。

它要求替换新的observeOnSubscribe(),订阅代码去哪里了?你能解释一下我的代码吗?编辑了我的答案,澄清了你的问题。我还想添加:option+enter(在mac上),自动将表达式替换为lambda表达式。它要求替换新的ObservableOnSubscribe(),订阅代码到哪里去了?你能解释一下我的代码吗?编辑了我的答案,澄清了你的问题。我还想添加:option+enter(在mac上),自动将表达式替换为lambda表达式。@Gabeschen它们不一样。
这与它们不同;如果使用lambda,则可能会创建更少的对象-每个调用站点一个;一个是在运行时通过
invokedynamic
创建的,另一个不是,还有更多differences@GabeSechan首先,我的com这句话的目的并不是要以任何方式说服你;它仅仅是为了表明两者之间存在着差异——对某些人来说意义重大,而对其他人来说显然没有那么大。@Gabetechan one由我编译:@Gabetechan作为旁注,
invokedynamic
is(java-9中的字符串串联)在jdk-10中已经使用并将被进一步开发和使用。@Gabetechan我想你偏离了主题……但让我们到此为止:有一个不同点,可能对你有重要意义some@GabeSechan它们不一样。
这与它们不同;如果使用lambda,可能会创建更少的对象-每个调用站点一个;一个是cr在运行时通过invokedynamic创建,另一个不是,还有更多differences@GabeSechan首先,我的评论并没有以任何方式说服你;它仅仅是为了表明两者之间存在差异——对某些人来说意义重大,而对其他人来说显然没有那么大。@Gabeschen由我编译的一本:和@Gabeschen作为旁注
InvokedDynamic(java-9中的字符串连接)已被使用,并将在jdk-10中被进一步利用和使用。@Gabeschen我想你偏离了主题……但让我们到此为止:存在差异,即使这是正确的,可能对某些人有意义——她的匿名内部类确实抛出了一个
异常
…)即使这是正确的-她的匿名内部类也会抛出一个
异常