背景:要根据集合里的组织id来过滤在这些组织下的用户,并将这些用户删除掉.
本来想着用多个for循环来操作,但想到写出来的代码比较复杂,就学着用stream流来解决了.
//获取到需要过滤的组织集合
List<String> filterOrgIds = Arrays.asList(StringUtils.split(bigDataColumn, ","));
CloudBigDataExample cloudBigDataExample = new CloudBigDataExample();
String query = keyValueMap.get(type);
//具体业务字段映射关系字段映射关系
cloudBigDataExample.createCriteria().andTypeEqualTo(query);
List<CloudBigData> queryData = cloudBigDataMapper.selectByExample(cloudBigDataExample);
JSONObject result = parseJsonByColumn(jsonObject, queryData);
switch (query) {
case "user":
User user = result.toJavaObject(User.class);
//过滤组织Id为空同步所有用户
if (CollectionUtils.isEmpty(filterOrgIds)){
userOperation(user);
break;
}
UserExample userExample = new UserExample();
List<User> users = userMapper.selectByExample(userExample);
//过滤出所有user中集合id在filterOrgIds中的用户
List<User> filterUsers = users.stream().filter(filterUser -> filterOrgIds.contains(filterUser.getOrgId())).collect(Collectors.toList());
//如果获取到的用户不为空则删除这些用户
if (CollectionUtils.isNotEmpty(filterUsers)){
List<String> filterUserIds = filterUsers.stream().map(filterUser -> filterUser.getId()).collect(Collectors.toList());
UserExample deleteUserExample = new UserExample();
deleteUserExample.createCriteria().andIdIn(filterUserIds);
userMapper.deleteByExample(deleteUserExample);
}
if (!filterOrgIds.contains(user.getOrgId())){
userOperation(user);
}
break;
case "org":
Organization organization = result.toJavaObject(Organization.class);
//过滤组织Id为空同步所有组织
if (CollectionUtils.isEmpty(filterOrgIds)){
orgOperation(organization);
break;
}
OrganizationExample organizationExample = new OrganizationExample();
List<Organization> organizations = organizationMapper.selectByExample(organizationExample);
List<Organization> filterOrganizations = organizations.stream().filter(filterOrganization -> filterOrgIds.contains(filterOrganization.getId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(filterOrganizations)){
List<String> filterOrganizationIds = filterOrganizations.stream().map(filterOrganization -> filterOrganization.getId()).collect(Collectors.toList());
OrganizationExample deleteOrganizationExample = new OrganizationExample();
deleteOrganizationExample.createCriteria().andIdIn(filterOrganizationIds);
organizationMapper.deleteByExample(deleteOrganizationExample);
}
if (!filterOrgIds.contains(organization.getId())){
orgOperation(organization);
}
break;
}