4
votes

Comment diffuser et collecter les méthodes d'instance résultant d'une collection d'objets?

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.


1 commentaires

Utilisez map pour convertir de Employee en String


3 Réponses :


2
votes
employees
   .stream()
   .filter(x-> x.getType() == 1)
   .map(Employee::getEmpId)
   .collect(Collectors.toSet());
will return the Set<String> which contain Employee Ids.

0 commentaires

2
votes

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());


0 commentaires

1
votes

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()));


0 commentaires