Lambda 表达式应用 权限管理_用户的角色修改
需求
前台发送用户新的角色列表,后台查询出用户原有的角色列表。
1.获取出需增加的角色列表 => 在新角色列表中,但是不在原角色列表中的角色
2.获取出需删除的角色列表 => 在原角色列表中,但是不在新角色列表中的角色
分析
其实是对集合中的元素进行过滤,获取符合条件的元素。
演示代码
package com.mozq.sb.sbmybatis01.coll;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description:
* @author: [email protected]
* @date: 2019/10/18 10:44
*/
public class ListTest {
public static void main(String[] args) {
List<Integer> L1 = Arrays.asList(1, 2, 3);
List<Integer> L2 = Arrays.asList(2, 3, 4);
//L3 = L1 - (L1 交 L2) 在L1不在L2中的元素
List<Integer> L3 = L1.stream().filter(e ->!L2.contains(e)).collect(Collectors.toList());
System.out.println(L3);
//L4 = L2 - (L1 交 L2) 在L2不在L1集合中的元素
List<Integer> L4 = L2.stream().filter(e->!L1.contains(e)).collect(Collectors.toList());
System.out.println(L4);
//L5 = L1 交 L2 既在L1也在L2集合中的元素
List<Integer> L5 = L1.stream().filter(e -> L2.contains(e)).collect(Collectors.toList());
System.out.println(L5);
}
}
项目代码
@Override
@Transactional
public void updateRolesOfUser(Integer userId, Integer companyId, List<Integer> roleIds) {
log.info("[为用户修改角色]|入参userId={},companyId={},roleIds={}",userId,companyId,roleIds);
// [MOZQ_ADD] 检查用户是否是当前砂场的,获取其中属于当前砂厂角色id列表
List<SysRole> roles = new ArrayList<>();
if(!roleIds.isEmpty()){
roles = sysRoleDao.findRolesByRoleIdsAndCompanyIdAndStatus(roleIds, companyId, null);
}
List<Integer> checkedRoleIds = roles.stream().map(SysRole::getId).collect(Collectors.toList());
log.info("[为用户修改角色][检查后属于当前砂厂的角色列表]checkedRoleIds={}",checkedRoleIds);
//获取用户当前的角色列表
List<SysRole> rolesOfUser = sysRoleDao.findRolesOfUser(userId, null);
List<Integer> roleIdsOfUser = new ArrayList<>();
if(!rolesOfUser.isEmpty()){
roleIdsOfUser = rolesOfUser.stream().map(SysRole::getId).collect(Collectors.toList());
log.info("[为用户修改角色][用户当前具有的角色]roleIdsOfUser={}", roleIdsOfUser);
}
List<Integer> roleIdsOfUserTemp = roleIdsOfUser;
//获取真正需要添加的角色列表
List<Integer> realAddRoleIds = checkedRoleIds.stream().filter(e ->! roleIdsOfUserTemp.contains(e)).collect(Collectors.toList());
log.info("[为用户修改角色][真正需要添加的角色]realAddRoleIds={}", realAddRoleIds);
sysUserDao.addRolesToUser(userId,companyId,realAddRoleIds);
//获取真正需要删除的角色列表
List<Integer> realDeleteRoIds = roleIdsOfUserTemp.stream().filter(e -> !checkedRoleIds.contains(e)).collect(Collectors.toList());
log.info("[为用户修改角色][真正需要删除的角色]realDeleteRoIds={}", realDeleteRoIds);
sysUserDao.deleteRolesFromUser(userId,companyId,realDeleteRoIds);
}