Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何处理带有count的ArrayList,以及具有字符串数组值的groupby函数_Java_Arraylist_Hashmap - Fatal编程技术网

Java 我如何处理带有count的ArrayList,以及具有字符串数组值的groupby函数

Java 我如何处理带有count的ArrayList,以及具有字符串数组值的groupby函数,java,arraylist,hashmap,Java,Arraylist,Hashmap,我正在处理员工的arraylist,需要按员工数、活动员工数和非活动员工数按功能使用情况分组。我知道如何处理总计,但当值在数组字符串中时,即一名员工与多个部门关联时,如何使用group by函数处理arraylist public class Employee { private String name; private List<String> department; private String status; public Employee(St

我正在处理员工的arraylist,需要按员工数、活动员工数和非活动员工数按功能使用情况分组。我知道如何处理总计,但当值在数组字符串中时,即一名员工与多个部门关联时,如何使用group by函数处理arraylist

public class Employee {
    private String name;
    private List<String> department;
    private String status;
    public Employee(String name, List<String> department, String status) {
        this.setName(name);
        this.setDepartment(department);
        this.setStatus(status);
    }
    public String getName() {
        return name;
    }
    public List<String> getDepartment() {
        return department;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setDepartment(List<String> department) {
        this.department = department;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
}

ArrayList<Employee> listEmployee = new ArrayList<Employee>();

         List<String> listString1 = Arrays.asList("IT", "Sales");
         List<String> listString2 = Arrays.asList("Sales");
         List<String> listString3 = Arrays.asList("Sales");


         listEmployee.add(new Employee("Ravi", listString1, "active"));
         listEmployee.add(new Employee("Tom", listString2, "inactive"));
         listEmployee.add(new Employee("Kanna", listString3, "inactive"));

int count = 0;
for (Employee e : listEmployee) {
    count++;
}
System.out.println("Count of Employees" + count);
请帮助我按部门分组处理数据

我期待以下输出:

部门总活动计数不活动计数
它是110
销售3 1 2

首先,我们需要创建一个类来保存每个部门的计数器。
类似于下面的bode(为了简洁起见,实例变量被公开)<因为我们将把这个类的实例放到一个
映射中,所以需要code>equals()
hashCode()

public class DepartmentStats {
    public String name;
    public int total = 0;
    public int activeCount = 0;
    public int inactiveCount = 0;

    public DepartmentStats() {}
    public DepartmentStats(String name) {
        this.name = name;
    }

    /**
     * equality based on dept name
     */
    @Override
    public boolean equals(Object other) {
        return other instanceof DepartmentStats && 
               this.name.equals(((DepartmentStats) other).name);
    }

    /**
     * hash code based on dept name
     */
    @Override
    public int hashCode() {
        return name.hashCode();
    }
}
其次,我们将创建一个地图,允许我们按部门对员工进行分组,并保留累积计数器

Map<String, DepartmentStats> departmentStatsMap = new HashMap<>();

您只需使用
listEmployee.size()
获取员工人数即可。
Map<String, DepartmentStats> departmentStatsMap = new HashMap<>();
for (Employee employee : listEmployee) {
    for (String departmentName : employee.getDepartment()) {
        DepartmentStats departmentStats = departmentStatsMap.get(departmentName);
        if (departmentStats == null) departmentStats = new DepartmentStats(departmentName);
        departmentStats.total++;
        if (employee.getStatus().equals("active")) departmentStats.activeCount++;
        if (employee.getStatus().equals("inactive")) departmentStats.inactiveCount++;
        departmentStatsMap.put(departmentName, departmentStats);
    }
}