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])]