我正在与rx-java2抗争。基本上,我不能从
Maybe
到
Single
并继续其余项的逻辑流。
下面是我的简化代码,演示我的问题:
public Flowable<Long> run() {
//let's assume this is my "input" data
List<UserTask> userTasks;
return Single.just(userTasks)
.flatMapPublisher(Flowable::fromIterable)
// userRepository.getUser returns a Maybe<User>
.map((UserTask ut) -> userRepository.getUser(ut.getName())
//search for user
//if not found, return a dummy user object
.defaultIfEmpty(User.newBuilder().build())
//leave dummy user objects only
.filter((User u) -> u.getName() == null)
//for each dummy user object return a corresponding user task
.map(u -> ut)
)
.flatMapSingle(Maybe::toSingle)
.flatMap((UserTask mt) -> {
// return user related to user task, implementation does not matter
return Flowable.just(User.newBuilder().build());
})
.flatMapSingle(this::saveUser);
}
private Single<Long> saveUser(User u) {
return userRepository.saveUser(m).subscribeOn(Schedulers.io());
}
我试着在需要的地方提供类型以便于理解。
问题是万一
也许 吧
是空的,这行(我想)
.flatMapSingle(Maybe::toSingle)
引发异常
NoSuchItemException
流执行终止。是否可以改进我的代码以便
也许 吧
值不存在,流程跳过此项并继续?
如果有遗漏的细节,请告诉我,我会提供的。