java - 如何在流循环中获取根类对象

标签 java spring-boot java-stream

我有 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/

相关文章:

Java Swing - 单用户应用程序到多用户应用程序

java - 如何使用 JPA 和 Hibernate 复制 INSERT/UPDATE/DELETE 语句

java - Resttemplate默认httpclient,读取超时有绝对值

java - 如何使用 java 8 stream api 更正编写代码?

java - 为什么 Map 函数在嵌套流中不起作用

java - Spring 集成

java - 修改公共(public)静态最终数组

java - 休息模板 - 没有可用的缓冲区空间(已达到最大连接数?)

linux - Ubuntu 14.04 LTS 磁盘中的 ${user.home}

java - 对列表中的不同类型字符串进行排序