java 高效列转行,java 列转行「建议收藏」

java 高效列转行,java 列转行「建议收藏」一个员工在多个部门内,一个部门有多个员工List———–>Map>1.部门类publicclassDept{publicDept(Stringid){this.id=id;}privateStringid;//省略get,set方法}2.员工类publicclassUser{publicUser(Stringid)…

大家好,又见面了,我是你们的朋友全栈君。

一个员工在多个部门内,一个部门有多个员工

List ———–> Map>

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148981.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月25日 下午10:16
下一篇 2022年6月25日 下午10:36


相关推荐

  • 新库上线 | CnOpenData中国工业企业绿色专利及引用被引用数据简介[通俗易懂]

    新库上线 | CnOpenData中国工业企业绿色专利及引用被引用数据简介[通俗易懂]中国工业企业绿色专利及引用被引用数据简介  改革开放以来,中国工业化迅速发展,但高增长的背后却隐藏着资源浪费、环境恶化等矛盾,在这些环境问题愈发突出的背景下,我国绿色发展新理念开始深入工业发展,近年来,此项工作已取得较好成绩:在工业和信息化部于2020年公布的我国2016-2019年工业绿色发展成绩单中,规模以上企业单位工业增加值能耗累计下降超过15%,相当于节能4.8亿吨标准煤,节约能源成本约4000亿元,同期,单位工业增加值二氧化碳排放量累计下降18%。经济效益和环境效益的双赢,是现代化工业发展的目标

    2026年4月16日
    2
  • Drupal表单实例教程[通俗易懂]

    Drupal表单实例教程[通俗易懂]Drupal表单实例教程form_example.info文件name=Formexampledescription=ExamplesofusingtheDrupalFormAPI.package=Examplemodulescore…

    2022年5月25日
    33
  • 进程间通信——共享内存(Shared Memory)

    进程间通信——共享内存(Shared Memory)共享内存是 SystemV 版本的最后一个进程间通信方式 共享内存 顾名思义就是允许两个不相关的进程访问同一个逻辑内存 共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式 不同进程之间共享的内存通常为同一段物理内存 进程可以将同一段物理内存连接到他们自己的地址空间中 所有的进程都可以访问共享内存中的地址 如果某个进程向共享内存写入数据 所做的改动将立即影响到可以访问同一段共享内存的任

    2026年3月17日
    2
  • arm汇编指令之数据块传输(LDM,STM)详解

    arm汇编指令之数据块传输(LDM,STM)详解arm 汇编指令之数据块传输 LDM STM

    2026年3月16日
    3
  • ACP 协议设计哲学 —— 为什么 OpenClaw 选择自研 Agent Client Protocol

    ACP 协议设计哲学 —— 为什么 OpenClaw 选择自研 Agent Client Protocol

    2026年3月12日
    3
  • Windows 7定时关机命令shutdown「建议收藏」

    Windows 7定时关机命令shutdown「建议收藏」在Win7中,shutdown实现自动关机的方法如下:【方法一:计划任务法】开始>>>在搜索框输入cmd>>>回车>>>调出DOS窗口或直接Windows键+R,直接调出运行栏>>>输入cmd>>>回车(个人较喜欢用后面的方法)举例说明一:要在中午12:00准时关机你可以输入如下命令:at12:00shutdonw -s 回车这样就

    2022年5月14日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号