1 回答
TA贡献1936条经验 获得超6个赞
在一个运算符和另一个运算符之间,您只能发出一种对象类型。在您的情况下,您正在发出一个布尔值,但您还希望能够访问 Entity 对象。解决方案是将两个值(实体对象和布尔值)包装在一个类中并发出该类。
创建一个类来包装 Entity 的发射和 setBlobProperty 的结果。
class Pair {
private final Entity entity;
private final boolean success;
private Pair(Entity entity, boolean success) {
this.entity = entity;
this.success = success;
}
public Entity getEntity() {
return entity;
}
public boolean isSuccess() {
return success;
}
}
然后更改您的代码以发出该类:
public void testGetBlob() throws RequestException {
TestData.getNewApplication().flatMap(testApplication -> {
// ...
return entity.create();
}).flatMap(entity ->
entity.setBlobProperty("text", "Hello world!".getBytes("UTF-8"))
// 1. Flat map the setBlobProperty call and emit a Pair with the entity and result
.flatMap(isSuccess -> Single.just(new Pair(entity, isSuccess)))
)
.flatMap(pair -> {
if(pair.isSuccess()) {
// 2. entity is available here via pair.getEntity()
return Single.just(isSuccess);
} else {
return Single.just(false);
}
}).subscribe(success -> {
// ...
}
}
Ps:不要创建自己的 Pair 类,而是检查此线程中的选项之一。如果您使用的是 Kotlin,则有一个Pair类。
添加回答
举报