• stream之flatMap实践


    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])]
  • 相关阅读:
    编写Excel文件的Golang库
    Go多组Raft库
    Go GraphQL初学者教程
    简洁架构的思想,基于go实现
    gometalinter代码质量检查分析工具(golang)
    用go实现一个redis-cli
    Sublime text —— 自定义主题Soda
    Sublime text —— 自定义Color theme
    Sublime Text增加Build system类型,打造一个全能IDE
    一个简单的增强型PHP curl函数
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/12120830.html
Copyright © 2020-2023  润新知