Является ли ArrayList.forEach () мутативной операцией? - PullRequest
0 голосов
/ 22 января 2019

У меня есть HashMap groups, который сопоставляется с ArrayList объектами для своих значений.Я хотел переназначить значения, учитывая, что они удовлетворяют определенному условию (т.е. в этом случае они присутствуют в другом списке) и натолкнулись на метод forEach.Вот как я это реализовал.Я не смог найти никакой документации относительно того, может ли он преобразовать мои данные, следовательно, мой вопрос.

Вот код:

groups.get(request.getGroup()).forEach(
          member -> {
               int updatedMemberIndex = request.getGroupMembers().indexOf(member);
               if (updatedMemberIndex != -1)
                     member = request.getGroupMembers().get(updatedMemberIndex);
          }
);

А вот сигнатуры методов для соответствующих методов вrequest объект:

List<GroupMember> getGroupMembers()
Group getGroup()

1 Ответ

0 голосов
/ 22 января 2019

Нет, вы не можете изменить коллекцию таким образом.member является локальной переменной, поэтому ее переназначение в if ничего не делает.

Вы можете использовать member, чтобы изменить свойства самого объекта GroupMember, но это не то, что вам нужно.

Похоже, вы пытаетесь выполнить операцию с картой.Вы, вероятно, хотите что-то вроде:

List<GroupMember> newList = groups.get(request.getGroup()).stream().map(
      member -> {
           int updatedMemberIndex = request.getGroupMembers().indexOf(member);
           return updatedMemberIndex != -1
               ? request.getGroupMembers().get(updatedMemberIndex)
               : member;
      }
).collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...