По сути, одна из концепций функционального программирования - pure functions
, которая определяет c и не имеет побочного эффекта, который называется immutability
. Все промежуточные операции в API Stream
являются неизменяемыми и возвращают новый поток.
Как указано в документе Oracle
, все промежуточные операции, такие как filter
, map
и et c возвращает новый поток. Например, документ метода map
выглядит следующим образом:
Stream<R> map(Function<? super T,? extends R> mapper)
Возвращает поток, состоящий из результатов применения данной функции к элементам этого потока. Это промежуточная операция.
Параметры типа: R - тип элемента нового потока Параметры:
mapper - не мешающая функция без сохранения состояния, применяемая к каждому элементу
Возвращает: новый поток
Для получения дополнительной информации вы можете взглянуть на реализацию Stream в Java (например, метод map
, который возвращает новый StatelessOp
)
public final <R> Stream<R> map(Function<? super P_OUT, ? extends R> mapper) {
Objects.requireNonNull(mapper);
return new StatelessOp<P_OUT, R>(this, StreamShape.REFERENCE,
StreamOpFlag.NOT_SORTED | StreamOpFlag.NOT_DISTINCT) {
@Override
Sink<P_OUT> opWrapSink(int flags, Sink<R> sink) {
return new Sink.ChainedReference<P_OUT, R>(sink) {
@Override
public void accept(P_OUT u) {
downstream.accept(mapper.apply(u));
}
};
}
};
}