1.权限分配案例
需求:
公司的管理系统定义了若干个角色
公司的每个部门领导对每个角色分配自己部门的若干权限
现在需要综合每个角色的所有权限
@Data @AllArgsConstructor @NoArgsConstructor static class KeyPair { private String key; private String value; } @Data @AllArgsConstructor @NoArgsConstructor static class RoleRight { private List<String> roles; private List<String> rights; } @Data @AllArgsConstructor @NoArgsConstructor static class RoleRightResult { private String role; private List<String> rights; }
2.分解,综合权限
List<RoleRight> list = Arrays.asList( new RoleRight(Arrays.asList("role1", "role2"), Arrays.asList("right1", "right2")), new RoleRight(Arrays.asList("role1", "role2", "role3"), Arrays.asList("right4", "right5", "right6")), new RoleRight(Arrays.asList("role3", "role2"), Arrays.asList("right7", "right8"))); List<RoleRightResult> listResult2 = list.stream() .flatMap(p -> p.roles.stream().flatMap(q -> p.rights.stream().map(k -> new KeyPair(q, k)))) .collect(Collectors.groupingBy(t -> t.key)) .entrySet() .stream() .map(p -> new RoleRightResult(p.getKey(), p.getValue().stream().map(q -> q.value).collect(Collectors.toList()))) .collect(Collectors.toList());
3.结果
[StreamTest.RoleRightResult(role=role1, rights=[right1, right2, right4, right5, right6]), StreamTest.RoleRightResult(role=role2, rights=[right1, right2, right4, right5, right6, right7, right8]), StreamTest.RoleRightResult(role=role3, rights=[right4, right5, right6, right7, right8])]