Я не хочу изменять этот объект напрямую, а создать новый объект будет все поля с измененным возрастом.Это возможно
Да, это возможно.Вы можете переопределить метод clone()
из Object:
@Override
public Person clone() {
try {
return (Person) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
Не забудьте реализовать Cloneable
:
public class Person implements Cloneable {
...
Предполагая, что у вас есть updateAge()
метод, подобный этому:
public Person updateAge(int age) {
this.setAge(age);
return this;
}
Тогда цепочка потоков будет выглядеть так:
List<Person> newPeople = people.stream()
.map(Person::clone)
.map(person -> person.updateAge(...))
.collect(toList());