La condition est de diffuser un ensemble d'objets, de filtrer sur certains critères et de ne collecter que l'ID d'employé dans un ensemble de chaînes
employees.stream().filter(x-> x.getType() == 1).collect(Collectors.toSet());
En filtrant l'instruction suivante
class Employee { private String empId; private int type; public int getType() { return type; } public String getEmpId() { return empId; } }
renvoie un Set
au lieu de cela, je veux collecter uniquement empId ie Set
Remarque: Impossible de créer une variable d'instance autre que privée.
3 Réponses :
employees .stream() .filter(x-> x.getType() == 1) .map(Employee::getEmpId) .collect(Collectors.toSet()); will return the Set<String> which contain Employee Ids.
Utilisez map ()
pour mapper les instances Employee
avec les ID d'employé correspondants.
Set<String> empIds = employees.stream() .filter(x-> x.getType() == 1) .map(Employee::getEmpId) .collect(Collectors.toSet());
Si vous avez également besoin de Employee
d'origine, vous pouvez utiliser à la place toMap
.
Set<String> employeeIds = employeesById.keySet();
Ceci est particulièrement utile si vous besoin de résoudre les employés plus tard. Si cela ne s'applique pas, les solutions ci-dessus doivent être préférées.
De plus, le Set
peut toujours être obtenu avec:
Map<String, Employee> employeesById = employees.stream() .filter(e-> e.getType() == 1) .collect(Collectors.toMap(Employee::getEmpId, Function.identity()));
Utilisez map pour convertir de
Employee
enString