как установить объект из другого объекта внутри лямбда-выражения

Я получаю список менеджеров из БД, и теперь мне нужно заполнить каждый объект этого списка другим объектом, то есть сотрудником, и вернуть его как список (employeeList) в свою вызывающую функцию. Оба менеджера и сотрудника содержат те же поля. Я должен достичь этого, используя выражение лямбда, используя поток.

Employee.java

public class Employee {
private String name;
private String designation;
private String active;

public String getActive() {
    return active;
}
public void setActive(String active) {
    this.active = active;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getDesignation() {
    return designation;
}
public void setDesignation(String designation) {
    this.designation = designation;
}}

Manager.java

public class Manager {
private String name;
private String designation;
private String active;
public String getActive() {
    return active;
}
public void setActive(String active) {
    this.active = active;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getDesignation() {
    return designation;
}
public void setDesignation(String designation) {
    this.designation = designation;
}}

ComponentImpl.java

public class ComponentImpl {

public List<Employee> catchAllEmployess () {

    List<Manager> managers = DbOperation.collectManagers(2);
    List<Employee> employees = new ArrayList<>();

    for (Manager manager : managers) {
        Employee employee = new Employee();
        employee.setName(manager.getName());
        employee.setDesignation(manager.getDesignation());
        employee.setActive(manager.getActive());
        employees.add(employee);
    }
    return employees;
}

}

Всего 2 ответа


Вы можете упростить выражение, включив в класс Employee конструктор в качестве

Employee(String name, String designation, String active) {
        this.name = name;
        this.designation = designation;
        this.active = active;
    }

которые затем могут быть использованы как

List<Employee> employees = managers.stream()
                .map(manager -> new Employee(manager.getName(), manager.getDesignation(), manager.getActive()))
                .collect(Collectors.toList());

Это, очевидно, надуманный пример, поэтому этот ответ может быть неприменим, но способ, которым эти классы написаны, кричит мне, что либо Manager должен расширить Employee либо они должны хотя бы расширить общий интерфейс. Тогда вся операция может даже не понадобиться.


Есть идеи?

10000