繁体   English   中英

如何使用流根据枚举类型返回布尔值 - SpringBoot

[英]How to use streams to return boolean value depending of enum type - SpringBoot

我有一个方法,我想用它来检查在我的模型中是否存在某种类型的枚举。 如果它存在我想返回true如果不存在我想返回false并带有错误消息。

我有看起来像这样的模型:

@Data
public class DataResponse {

    public final String userId;
    public final List<Model> modelList;

}

模型.java

@Data
public class Model {
    public final String modelId;
    public final ModelType type;
    public final ModelStatus status;
}

模型类型.java

public enum ModelType {
    Fast,
    Slow;
}

模型状态文件

public enum ModelStatus {
    CREATED,
    FAILED
}

现在我想使用 strems 检查我的模型是否包含"Fast"类型,如果包含状态"CREATED"如果是,则返回true如果不返回false并带有错误消息。

到目前为止,我有这个:

public Boolean isModelFastAndSuccess(String modelId){
    Optional<DataResponse> modelList = dataService.getModelStatus(modelId);
    userProofList.stream().map(ml -> ml.modelList)
            .map(models -> {
                if() 
            })
            .collect(Collectors.toList());
    }

我不知道如何完成它。 任何建议表示赞赏。

假设dataService::getModelStatus返回Optional<DataResponse> ,实现isModelFastAndSuccess的方法可能如下:

public Boolean areAllModelsFastAndSuccess(String modelId) {
    return dataService.getModelStatus(modelId) // Optional<DataResponse>
        .map(DataResponse::getModelList) // Optional<List<Model>>
        .orElse(Collections.emptyList()) // List<Model>
        .stream() // Stream<Model>
        .allMatch(model -> model.getType() == ModelType.Fast 
                        && model.getStatus() == ModelStatus.CREATED
        );
}

此外,如果至少有一个Fast / Created模型,则可以实现一种方法以返回true

public Boolean isAnyModelFastAndSuccess(String modelId) {
    return dataService.getModelStatus(modelId) // Optional<DataResponse>
        .map(DataResponse::getModelList) // Optional<List<Model>>
        .orElse(Collections.emptyList()) // List<Model>
        .stream() // Stream<Model>
        .anyMatch(model -> model.getType() == ModelType.Fast 
                        && model.getStatus() == ModelStatus.CREATED
        );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM