【问题标题】:How to split a collection into multiple collections based on the same elements of objects?如何根据对象的相同元素将一个集合拆分为多个集合?
【发布时间】:2021-01-20 10:55:27
【问题描述】:

我有一个收藏,用于保存办公室所有部门的员工。我需要将这一个集合拆分成几个不同的集合,即我想将所有员工拆分到他们的部门中。重要的是我不自己写部门的名称,程序本身将集合分解为必要的多个部分。是否有可能做到这一点,如果可以,具体实施方式是什么?

有一个集合,这个集合有办公室工作人员(全部)。班级中的员工有一个他工作的注册部门(类型 STRING)。需要根据部门划分一个完整的集合。

很遗憾我无法分享课程(生产代码)。我尝试通过 for 循环运行 ArrayList,然后通过 if 拆分,但后来我卡住了,不明白如何创建其他集合。

员工:

public class Employee {

   private String name;

   private String lastName;

   private String department;
}

方法(我的列表):

public void method() { // Change method name

        List<EmployeeKnowledge> employeeKnowledgeList = employeeKnowledgeRepository
                .findEmployeeKnowledgeByStatus(KnowledgeStatus.KNOW);

        List<Employee> employeeList = new ArrayList<>(); // 
        employeeKnowledgeList.forEach(e -> employeeList.add(employeeRepository.getOne(e.getEmployeeId())));

        //AND NOW I DONT KNOW HOW SPLIT MY employeeList 
}

【问题讨论】:

    标签: java collections


    【解决方案1】:

    这里需要一个 Map 数据结构,其中键是 Department,值是 List&lt;Employee&gt;。这可以很容易地实现,如下所示:

    var departmentMapped = employees
        .stream()
        .collect(Collectors.groupingBy(Employee::getDepartment));
    

    本质上,它的作用是流式传输员工列表并将其收集到基于各自部门的新Map。有了这个,您可以使用 Map#get 简单地获取特定部门的员工列表。

    【讨论】:

    • 变种?什么是变量?
    • var 是 Java 10 中引入的关键字,它允许通过简单地使用 var 来声明变量并让本地类型推断,推断类型(基于右侧部分的分配)。将var departmentMapped 视为Map&lt;String, List&lt;Employee&gt;&gt; departmentMapped。
    • 我无法获取元素。请告诉我怎么做?
    • I cannot get element 是什么意思?它是一个简单的地图对象。检查您应该如何从 Map 中检索值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多