Rxjava lambda 表达式
Rxjava lambda expressions
我目前正在学习 lambda 表达式并且有一个关于 RxJava 的问题。我认为可以使用 lambda 表达式,这样您就不必创建匿名 class 并且它们只能在接口具有单个抽象方法的情况下使用。现在根据关于观察者的 http://reactivex.io/ 文档,它是一个接口。那么如何在一个接口中实现两个 lambda 表达式呢?
Observable.<User>create(subscriber -> {
User updatedUser = userService.updateuser(usermapper.userdtotoentity(user));
subscriber.onNext(updatedUser);
}).subscribe(
user -> {
if (user != null) {
response.resume(user);
} else {
response.resume(Response.status(Status.NOT_FOUND).build());
}
},
error -> {
logger.debug("User with email_id:" + email_id + " is not present");
response.resume(error);
}
);
您正在使用的Observable.subscribe
方法接受两个参数,这两个参数都是函数式接口类型。因此,您可以传递一个 lambda 表达式作为两者的值。
如果您觉得这样会使代码更清晰,您可以提取要传递给局部变量的参数:
Action1 onNext = user -> { .... };
Action1 onError = error -> { .... };
Observable.<User>create(subscriber -> {....}).subscribe(onNext, onError);
我目前正在学习 lambda 表达式并且有一个关于 RxJava 的问题。我认为可以使用 lambda 表达式,这样您就不必创建匿名 class 并且它们只能在接口具有单个抽象方法的情况下使用。现在根据关于观察者的 http://reactivex.io/ 文档,它是一个接口。那么如何在一个接口中实现两个 lambda 表达式呢?
Observable.<User>create(subscriber -> {
User updatedUser = userService.updateuser(usermapper.userdtotoentity(user));
subscriber.onNext(updatedUser);
}).subscribe(
user -> {
if (user != null) {
response.resume(user);
} else {
response.resume(Response.status(Status.NOT_FOUND).build());
}
},
error -> {
logger.debug("User with email_id:" + email_id + " is not present");
response.resume(error);
}
);
您正在使用的Observable.subscribe
方法接受两个参数,这两个参数都是函数式接口类型。因此,您可以传递一个 lambda 表达式作为两者的值。
如果您觉得这样会使代码更清晰,您可以提取要传递给局部变量的参数:
Action1 onNext = user -> { .... };
Action1 onError = error -> { .... };
Observable.<User>create(subscriber -> {....}).subscribe(onNext, onError);