Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RXJava逻辑映射链_Java_Rx Java - Fatal编程技术网

RXJava逻辑映射链

RXJava逻辑映射链,java,rx-java,Java,Rx Java,我用RXJava编写了以下代码 validateProduct(payload) .map.(r -> { if(r.getBoolean("valid")){ return createProduct(productPayload); }else{ return null; // request.end() | end the chain here with some message as invalid product. } })

我用RXJava编写了以下代码

validateProduct(payload)
.map.(r -> {
    if(r.getBoolean("valid")){
        return createProduct(productPayload);
    }else{
        return null; // request.end() | end the chain here with some message as invalid product.
    }
})
.map(r -> {
    return linkCategories(catPayload);
})
.map(r -> {
    return linkTags(tagPayload);
})
.doOnError(e -> log.error(e))
.subscribe(r -> {
    JsonObject response = new JsonObject().put("status", true);
    request.end(response);
}, e -> {
    JsonObject response = new JsonObject().put("status", false);
    request.end(response);
});

第一个块有一个条件检查,此代码现在不工作。在RX中处理条件链的最佳方法是什么?

看起来您可能遇到了空指针异常。RxJava v2中不接受空值。您的第一张地图可能会导致问题

通常,当您在rxjava中需要条件逻辑并且可能不返回对象时,您有两个选项:

返回一个表示null的对象,并可能将其过滤掉 使用类似flatMap的操作符并添加一个空的可观察对象
看起来您可能遇到了空指针异常。RxJavav2中不接受空值。您的第一张地图可能会导致问题

备选案文1

validateProduct(payload)
.map.(r -> {
    if(r.getBoolean("valid")){
        return createProduct(productPayload);
    }else{
        return createEmptyProduct(); // generate non null placeholder object
    }
})
.filter(r->{
    // check here via method call or instanceOf to filter out empty products
    r instanceof ValidProduct
}).map(r -> {
    return linkCategories(catPayload);
})
.map(r -> {
    return linkTags(tagPayload);
})
.doOnError(e -> log.error(e))
.subscribe(r -> {
    JsonObject response = new JsonObject().put("status", true);
    request.end(response);
}, e -> {
    JsonObject response = new JsonObject().put("status", false);
    request.end(response);
});
选择2

validateProduct(payload)
.flatMap(r -> {
    if(r.getBoolean("valid")){
        return createProduct(productPayload); // Assuming this returns an observable if not use Observable.just(createProduct(productPayload))
    }else{
        return Observable.empty(); // request.end() | end the chain here with some message as invalid product.
    }
})
.map(r -> {
    return linkCategories(catPayload);
})
.map(r -> {
    return linkTags(tagPayload);
})
.doOnError(e -> log.error(e))
.subscribe(r -> {
    JsonObject response = new JsonObject().put("status", true);
    request.end(response);
}, e -> {
    JsonObject response = new JsonObject().put("status", false);
    request.end(response);
});

在第二个选项中,返回return Observable.empty;,将调用linkCategoriescatPayload吗?@minatoramikaze否