问题描述
我目前正在学习lambda表达式,并且对RxJava有疑问。我认为可以使用lambda表达式,因此您不必创建匿名类,并且仅在接口具有单个抽象方法的情况下才可以使用它们。现在根据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);