我已经开始了解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);
});