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
EmployeeenString