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])]
12-20 05:55
查看更多