J'é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
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' Employee
objets, 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.