0

我有 3 节课。如果 vifLineItemResponse.isSuccess() 为 true ,我需要 PostProcessorRequest 。如果条件在其一个嵌套字段类中为真,我如何获得 PostProcessorRequest。

public class PostProcessorRequest {
    FulfillmentResponse response;
    SalesOrderDocument orderDocument;
    //Getters and setters 
}

public class FulfillmentResponse {
    Collection<VifLineItemResponse> responses;
    //Getters and setters 
}

public class VifLineItemResponse {
    VifLineItem vifLineItem;
    boolean isSuccess;
    // Getters and setters 
}

我尝试过的方式是

postProcessorRequest.getResponse()
                    .getResponses()
                    .stream()
                    .filter(match -> match.isSuccess())
                    .collect(Collectors.toList());

但我FulfillmentResponse只得到对象。我怎样才能得到postProcessorRequest

4

1 回答 1

1

目前尚不清楚是否需要检查至少一个响应是否成功,或者它们是否都成功,但无论哪种方式,您都可能希望在根对象上使用 Optional 而不是流式传输叶对象:

Optional.of(postProcessorRequest)
        .filter(ppr->ppr.response!=null)
        .filter(ppr->ppr.response.responses.stream().anyMatch(VifLineItemResponse::isSuccess))
        .ifPresent(ppr-> {
            // ppr has at least one success response,
            // do with it whatever needs to be done
        })

如果您需要所有响应都是真实的,请更改anyMatchallMatch

或者,您可以将您的类更改为具有双向关系,例如:

public class PostProcessorRequest {
    FulfillmentResponse response;
    SalesOrderDocument orderDocument;
    //Getters and setters 
}

public class FulfillmentResponse {
    Collection<VifLineItemResponse> responses;
    PostProcessorRequest getRequest(){ /* points back to parent */ }
    //Getters and setters 
}

public class VifLineItemResponse {
    VifLineItem vifLineItem;
    PostProcessorRequest getFulfillmentResponse(){ /* points back to parent */ }
    boolean isSuccess;
    // Getters and setters 
}

现在我们可以修改您的原始代码:

postProcessorRequest.getResponse()
                    .getResponses()
                    .stream()
                    .filter(match -> match.isSuccess())
                    .map(VifLineItemResponse::getFulfillmentResponse)
                    .map(FulfillmentResponse::getRequest)
                    .distinct()
                    .collect(Collectors.toList());
于 2020-03-26T22:47:52.507 回答