Как добавить элемент в массив объектов через цикл foreach?

У меня есть класс Team примерно так: (Конструктор)

public Teams(String managerName, ArrayList<Employee> directReportEmployees){
    this.managerName = managerName;
    this.directReportEmployees = directReportEmployees;
}

Моя цель здесь — добавить сотрудника в список команды, менеджером которой является «Джон». Для этого я просматриваю список команд, чтобы найти команду с именем менеджера «Джон», а затем добавляю сотрудника в список сотрудников с менеджером «Джон».

for (Teams team : TeamsList) {
    if (team.managerName.equals("John")){
        team.directReportEmployees.add(emp1);
       //assume emp1 is an object type Employee.
    }
}

Так был сгенерирован массив команд.

        ArrayList<Employee> sampleList= new ArrayList<>();
        ArrayList<Teams> TeamsList = new ArrayList<>();

        for (Employee employee : employeesList) {
            Teams team = new Teams(employee.firstName, sampleList);
            TeamsList.add(team);
        }

Однако, когда я это делаю, это добавляет сотрудника во все команды. Я не уверен, где я ошибаюсь.

Любая помощь горячо приветствуется.

Как вы составляли списки? пожалуйста, поделитесь столько кода, сколько необходимо, чтобы мы могли воспроизвести это

azro 09.04.2022 19:23

Я добавил его, пожалуйста, дайте мне знать, если это поможет.

mrkn0007 09.04.2022 19:29

Поделитесь кодом, чтобы сделать пример воспроизводимый, чтобы мы могли просто скопировать и запустить его, этого недостаточно, нам нужны все определения переменных

azro 09.04.2022 19:30

Разве Teams не должно быть названо в единственном числе? Этот класс представляет одну команду или несколько?

Basil Bourque 09.04.2022 20:05
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
4
4
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы создали список сотрудников один раз ArrayList<Employee> sampleList= new ArrayList<>(); и добавили его во все команды, тот же экземпляр, каждая команда использует один и тот же список, поэтому при добавлении в одну вы видите его в каждой

Вам нужно создать новый список для каждой команды

List<Teams> TeamsList = new ArrayList<>();

for (Employee employee : employeesList) {
    Teams team = new Teams(employee.firstName, new ArrayList<>());
    TeamsList.add(team);
}

Также, поскольку класс Teams представляет команду один, он должен быть назван Team в единственном числе.

Итак, это происходит, когда вы создаете экземпляр массива команд с одним и тем же ArrayList.

Вы не предоставили полный код, но я предполагаю, что это ваш текущий код

ArrayList<Employee> sampleList= new ArrayList<>();
    ArrayList<Teams> TeamsList = new ArrayList<>();

    for (Employee employee : employeesList) {
        Teams team = new Teams(employee.firstName, sampleList);
        TeamsList.add(team);
    }

изменить это на

    ArrayList<Teams> TeamsList = new ArrayList<>();

    for (Employee employee : employeesList) {
        Teams team = new Teams(employee.firstName, new ArrayList<>());
        TeamsList.add(team);
    }

Ваш код недействителен и поэтому не компилируется, посмотрите;) (кроме ярлыка «psvm»)

azro 09.04.2022 19:38

я обновил одну строку после прочтения вашего кода, которого раньше не было. Запустите и проверьте

Samuel Simon 09.04.2022 19:52

Имена переменных экземпляра должны начинаться с нижнего регистра.

Basil Bourque 09.04.2022 19:54

Другие вопросы по теме