从rx Java表达式转换为lambda



我已经开始了解retrolambda和rxjava了。有些表达式是我自己转换的,但有些我不能转换。我在我的项目中添加了retrolambda。下面是一些例子

public Observable<ImmutableList<Repository>> getUsersRepositories() {
        return githubApiService.getUsersRepositories(user.login)
                .map(repositoryResponses -> {
                        final ImmutableList.Builder<Repository> listBuilder = ImmutableList.builder();
                        for (RepositoryResponse repositoryResponse : repositoryResponses) {
                            Repository repository = new Repository();
                            repository.id = repositoryResponse.id;
                            repository.name = repositoryResponse.name;
                            repository.url = repositoryResponse.url;
                            listBuilder.add(repository);
                        }
                        return listBuilder.build();
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());
    }

但我不知道如何转换这和平的代码:

obs.subscribe(new Observer<List<Integer>>() {
        public void onCompleted() {
            System.out.println("completed");
        }
        public void onError(Throwable e) {
            System.out.println("failure");
        }
        public void onNext(List<Integer> value) {
            System.out.println("onnext=" + value);
        }
    });

我想你应该这样写:

obs.subscribe(
         (List<Integer> value) -> System.out.println("onnext=" + value),
         (Throwable e) -> System.out.println("failure"),
         ()-> System.out.println("completed"));

你可以在GitHub上查看这个博客和这个例子

Lambda是一个匿名函数,你正在创建一个匿名类,相似但不同。

第一个已经是Lambda: .map(repositoryResponses -> {...},你还想改变什么?第二部分是"块码",所以你不能再减少它了。

第二个你不能转换它因为它不是一个函数

我已经找到解决它的方法了。下面是转换前的代码

    repositoriesManager.getUsersRepositories().subscribe(new SimpleObserver<ImmutableList<Repository>>() {
        @Override
        public void onNext(ImmutableList<Repository> repositories) {
            repositoriesListActivity.showLoading(false);
            repositoriesListActivity.setRepositories(repositories);
        }
        @Override
        public void onError(Throwable e) {
            repositoriesListActivity.showLoading(false);
        }
    });
转换后

  repositoriesManager.getUsersRepositories().subscribe(repositories -> {
        repositoriesListActivity.showLoading(false);
        repositoriesListActivity.setRepositories(repositories);
    },throwable -> {
        repositoriesListActivity.showLoading(false);
    });

相关内容

  • 没有找到相关文章

最新更新