如果条件不满足,如何跳过映射元素

假设我有以下内容

public class UserEntity{
    String id;
    List<String> relatedEntity;
}

public class EmployeeEntity{
    String id;
    String name;
    Boolean isActive;
    List<String> relatedEntityDetails;
}

现在有一个 UserEntity 列表,我必须映射到一个 EmployeeEntity 列表:

private List<EmployeeEntity> getEmployees(List<UserEntity> users)
     return users.stream()
         .filter(x-> !x.getRelatedEntity().isEmpty())
         .map(this::mapToEmployee)
         .collect(Collectors.toList());
}

private EmployeeEntity mapToEmployee(UserEntity userEntity){
    // retrieve EmployeeEntity from DB and perform a validations like
    // employeeEntity.isActive = true
    return employeeEntity;
}

现在,一切正常,但是我需要处理当 EmployeeEntity 不存在于 db 或 isActive = false 时的场景,在这些场景中,应该跳过 map(),所以如果有 3 个元素的列表 UserEntity 和其中一个用户,一名员工不活跃,那么返回的 List 应该只有 2 个元素。

关于如何添加该行为的任何建议?

回答

mapToEmployee返回Optional<EmployeeEntity>,和一个过滤那些不为空:

private List<EmployeeEntity> getEmployees(List<UserEntity> users)
return users.stream()
.filter(x-> !x.getRelatedEntity().isEmpty())
.map(this::mapToEmployee)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
}
private Optional<EmployeeEntity> mapToEmployee(UserEntity userEntity){
... optional depending on whether it is present in DB and/or is active
}

以上是如果条件不满足,如何跳过映射元素的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>