Comment puis-je traiter avec le ArrayList comte, et le groupe par fonction

cb rak:

entrez la description d'image iciJ'étais traiter le arraylist des employés, et ont besoin du groupe par l'utilisation de la fonction par le nombre d'employés, compter les salariés actifs et inactifs comptent des employés. Je sais comment traiter le total, mais comment puis-je traiter le arraylist avec le groupe par fonction.

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

ArrayList<Employee> listEmployee = new ArrayList<Employee>();
listEmployee.add(new Employee("Ravi", "IT", "active"));
listEmployee.add(new Employee("Tom", "Sales", "inactive"));
listEmployee.add(new Employee("Kanna", "IT", "inactive"));

int count = 0;
for (Employee e : listEmployee) {
    count++;
}
System.out.println("Count of Employees" + count);

Voici le code ci-dessus j'ai essayé d'obtenir le nombre d'employés

int count = 0;
for (Employee e : listEmployee) {
    count++;
}
System.out.println("Count of Employees" + count);

S'il vous plaît aidez-moi à traiter les données en regroupant du département

J'attends la sortie suivante à venir:

Department total activeCount inactiveCount
IT         2     1           1
Sales      1     0           1
Merci plein Guy:

Vous pouvez utiliser la stream()méthode de l' List<Employee>obtenir un Stream<Employee>et utilisez le Collectors.groupingBy(Employee::getDepartment)pour regrouper les objets employés par le ministère. Une fois cela fait vous retourner un Map<String, List<Employee>>objet de la carte.

La clé sera le nom du service et la valeur sera une liste d' Employeeobjets, maintenant de cette liste des employés , nous pouvons filtrer davantage les inactifs et actifs employés:

System.out.println("Department total activeCount inactiveCount");
listEmployee.stream().collect(Collectors.groupingBy(Employee::getDepartment)).forEach((dept, emps) -> {
     int count = emps.size();
     long activeCount = emps.stream().filter(e -> "active".equals(e.getActive())).count();
     long inactiveCount = emps.stream().filter(e -> "inactive".equals(e.getActive())).count();
     int i = 12 - dept.length();
     System.out.format(dept + "%" + i +"s" + count + "%10s" + activeCount + "%10s" + inactiveCount, " ", " ", " ");
     System.out.println();
 });

Production:

Department total activeCount inactiveCount
Sales       1          0          1
IT          2          1          1

Il est également conseillé d'utiliser un Enum pour le statut actif ou inactif plutôt que d' une chaîne.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=236451&siteId=1
conseillé
Classement