我有 3 节课。如果 vifLineItemResponse.isSuccess() 为 true ,我需要 PostProcessorRequest 。如果条件在其一个嵌套字段类中为 true,我如何获取 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
?
最佳答案
尚不清楚您是否需要检查至少一个响应是否成功,或者它们是否全部成功,但无论哪种方式,您可能希望在根对象上使用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
})
如果您需要所有响应均为 true,请将 anyMatch
更改为 allMatch
或者,您可以将类更改为具有双向关系,即如下所示:
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());
关于java - 如何在流循环中获取根类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60877149/