Я хотел написать чистую функцию с Java 8, которая возьмет коллекцию в качестве аргумента, применит некоторое изменение к каждому объекту этой коллекции и вернет новую коллекцию после обновления. Я хочу следовать принципам FP, поэтому я не хочу обновлять/модифицировать коллекцию, которая была передана в качестве аргумента.Java 8 изменить элементы потока
Есть ли способ сделать это с помощью Stream API, не создавая сначала первую коллекцию (а затем используя forEach или «normal» для цикла)?
объект Пример ниже и позволяет предположить, что я хочу, чтобы добавить текст к одному из свойства объекта:
public class SampleDTO {
private String text;
}
Так что я хочу сделать что-то подобное ниже, но без изменения коллекции. Предполагая, что «список» - List<SampleDTO>
.
list.forEach(s -> {
s.setText(s.getText()+"xxx");
});
Я бы сказал, что это немного противоречит принципу функционального программирования здесь. Идея состоит в том, чтобы не мутировать состояние, а создавать новое состояние как произведение функции. Вот почему вместо изменения исходного списка вы должны использовать функцию «map», предоставляемую API потока Java, для создания нового списка. – christopher