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

Я получаю список менеджеров из БД, и теперь мне нужно заполнить каждый объект этого списка другим объектом, то есть сотрудником, и вернуть его в виде списка (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 ]

0 голосов
/ 13 октября 2018

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

0 голосов
/ 13 октября 2018

Вы можете упростить выражение, включив конструктор в класс 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...