Rxjava Lambda表达式

问题描述

我目前正在学习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);