Поскольку вы используете void
в качестве возвращаемого типа и хотите изменить данный список с помощью потока, не будет лучшим решением.Вы можете просто использовать List.replaceAll()
и List.removeIf()
, чтобы решить это простым оператором if
:
public void applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
if (action == Action.Replace) {
fizzes.replaceAll(fizz -> fizz.getId() == toModify.getId() ? toModify : fizz);
} else {
fizzes.removeIf(fizz -> fizz.getId() == toModify.getId());
}
}
Если у вас больше действий, чем заменитьи удалить вы можете использовать оператор switch
вместо if
.
Если вы действительно хотите использовать потоки, я бы также разделил различные действия.Вы также должны вернуть новый List в вашем методе и переназначить его переменной, которую вы передаете этому методу:
public List<Fizz> applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
if (action == Action.Replace) {
return fizzes.stream()
.map(fizz -> fizz.getId() == toModify.getId() ? toModify : fizz)
.collect(Collectors.toList());
}
return fizzes.stream()
.filter(fizz -> fizz.getId() != toModify.getId())
.collect(Collectors.toList());
}