美文网首页
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 列转行

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

  • oracle列转行、列转行

    oracle列转行 SELECT REGEXP_SUBSTR('aa,bbb,cccc', '[^,]+', 1,...

  • spark 行专列,列转行

    目的:数据行专列,列转行 数据准备: 列转行: 行专列: 完整代码:

  • sql中列转行unpivot、行转列pivot详细讲解||Mys

    目录:一、sqlserver列转行、行转列详解二、Oracle列转行、行转列详解三、DB2列转行、行转列详解四、M...

  • 列转行

    select K, V from #OldData UNPIVOT([V] for [K] in (Employe...

  • awk横纵转换

    数据如下: 代码 列转行: 结果

  • Sql 列转行

    实现效果 原始数据 转换后数据 示例代码

  • mysql 列转行

    mysql 的group_concat函数很好用,可以把列转成行。 SELECT threadid, group_...

  • mysql列转行

    需求:将表 idcolumn1A,B,C2D,E 转为表 idcolumn1A1B1C2D2E 新建表:test ...

  • mysql开发技巧笔记

    行转列 结果 使用 SUM 进行 行转列 列转行 应用场景 属性拆分 etl数据处理 1. 利用序列表处理列转行的...

网友评论

      本文标题:java 列转行

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