Android 如何用lambda替换rx java表达式?
我一直认为表达式可以替换为用于Java8的lambda。我该怎么办?下面是我从中得到这条信息的一个表达方式: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
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我想你偏离了主题……但让我们到此为止:存在差异,即使这是正确的,可能对某些人有意义——她的匿名内部类确实抛出了一个异常
…)即使这是正确的-她的匿名内部类也会抛出一个异常