java - 如果条件不满足,如何跳过映射元素
问题描述
假设我有以下
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 或 isActive = false 时,我需要处理这种情况,在这些情况下,应该跳过 map(),所以如果有 3 个元素 UserEntity 和 for其中一个用户,一名员工不活跃,那么返回的列表应该只有 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
}
推荐阅读
- c# - 自动完成的结果不显示在部分视图中
- c# - 类型化数据集中区分大小写
- java - if 语句跳到 else
- java - Gradle 构建测试未通过我的所有测试,但个人运行正常
- bash - 如何在 github 操作中使用计算属性
- java - 构建时具有本地依赖项的 NoClassDefFoundError
- c# - Xamarin:窗口返回 Null,如何获取窗口?
- python - 当通过组合关联对象时使用什么模式来促进对象之间的通信
- android - 在 Android 中构建 react-native 第一个应用程序时出错:SDK 目录不存在
- ansible - 如何在不同用户的不同服务器上运行命令