美文网首页
java 列转行

java 列转行

作者: 朝闻道夕睡觉 | 来源:发表于2020-11-13 14:14 被阅读0次

    一个员工在多个部门内,一个部门有多个员工
    List<员工> -----------> Map<部门id,List<员工>>

    1.部门类

    public class Dept {
        public Dept(String id) {
            this.id = id;
        }
        private String id;
        //省略get,set 方法
    }
    

    2.员工类

    public class User {
        public User(String id) {
            this.id = id;
        }
        private String id;
        private List<Dept> deptList;
        //省略get,set 方法
    }
    

    3: 测试类

    public class TestDemo {
    
        public static void main(String[] args) {
            User user1 = new User("员工1");
            User user2 = new User("员工2");
            User user3 = new User("员工3");
            Dept dept1 = new Dept("部门1");
            Dept dept2 = new Dept("部门2");
    
            ArrayList<Dept> deptList = new ArrayList<>();
            deptList.add(dept2);
            deptList.add(dept1);
            // 员工1 = 部门1,2
            user1.setDeptList(deptList);
            // 员工2 = 部门1
            user2.setDeptList(Collections.singletonList(dept1));
            // 员工3 = 部门1,2
            user3.setDeptList(deptList);
    
            ArrayList<User> userList = new ArrayList<>();
            userList.add(user3);
            userList.add(user2);
            userList.add(user1);
            /* 转换成部门map应该为
             *  部门1 = 员工1,2,3
             *  部门2 = 员工1,3
             */
            
        }
    }
    

    4.1我的实现:

    先建一个组合类

    public class UserComposite {
        public UserComposite(User user, String deptId) {
            this.user = user;
            this.deptId = deptId;
        }
        private User user;
        private String deptId;
        //省略 get,set 方法
    }
    

    4.2: 实现代码

    Map<String, List<User>> map = userList.stream()
                    // 过滤空部门的数据
                    .filter(user -> user.getDeptList() != null && !user.getDeptList().isEmpty())
                    // 转换部门和员工的关系
                    .map(user-> user.getDeptList().stream().map(dept-> new UserComposite(user, dept.getId())).collect(Collectors.toList()))
                    // 合并流进行分组
                    .flatMap(List::stream).collect(Collectors.groupingBy(UserComposite::getDeptId, Collectors.mapping(UserComposite::getUser, Collectors.toList())));
    
            System.out.println(map);
    

    相关文章

      网友评论

          本文标题:java 列转行

          本文链接:https://www.haomeiwen.com/subject/psivbktx.html