【问题标题】:How to use streams to return boolean value depending of enum type - SpringBoot如何根据枚举类型使用流返回布尔值 - Spring Boot
【发布时间】:2021-10-18 15:15:22
【问题描述】:

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

我的模型看起来像这样:

@Data
public class DataResponse {

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

}

Model.java

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

ModelType.java

public enum ModelType {
    Fast,
    Slow;
}

ModelStatus.java

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());
    }

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

【问题讨论】:

  • return userProofList.stream().any/all/noneMatch(/* some predicate */);?
  • 你能把它写成我的例子的代码示例吗?
  • 你能澄清一下你将如何返回 false 和错误信息吗?
  • 没错,猜错误信息就够了
  • 那么 isModelFastAndSuccess 方法应该如何同时返回 something 这是一个布尔值和一个字符串消息?此外,尚不清楚响应字段 modelList 是否必须包含 all 模型 FastCreated 或仅包含 any

标签: java spring-boot enums java-stream


【解决方案1】:

假设dataService::getModelStatus返回Optional&lt;DataResponse&gt;,实现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
        );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多