首页 > 其他 > 详细

stream之flatMap实践

时间:2019-12-30 17:30:32      阅读:105      评论:0      收藏:0      [点我收藏+]

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

 

stream之flatMap实践

原文:https://www.cnblogs.com/zhshlimi/p/12120830.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!