Stream API не совсем подходит для решения данной задачи, так как она подразумевает изменение (мутацию) содержимого списка, то есть использование побочного эффекта в операции Stream::peek
или даже Stream::forEach
в общем случае крайне не рекомендуется, так как операции над стримами должны "не вмешиваться" в источник стрима и не зависеть от состояния стрима (каждый элемент стрима не зависит от какого-либо другого):
Most stream operations accept parameters that describe user-specified behavior... To preserve correct behavior, these behavioral parameters:
- must be non-interfering (they do not modify the stream source);
- and in most cases must be stateless (their result should not depend on any state that might change during execution of the stream pipeline)._
Однако есть возможность применить метод родительского интерфейса Iterable::forEach
, предназначенный для подобного рода задач, так как здесь используется итератор в функциональном стиле:
list.forEach(wi -> wi.getWorker().setError(
null == wi.getWorker().getSalary() ? "Зарплата не установлена" : ""
));