Конвертирует любой входной поток в верхний регистр.Мой вопрос заключается в том, вызывается ли метод apply () в классе Uppercase автоматически?
Действительно, в этом заключается роль Stream.map()
реализации вызова apply()
, вы никогда этого не сделаете, когдаStream.map()
вызывается.
Абстрактный класс ReferencePipeline
делает следующее:
@SuppressWarnings("unchecked")
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)); // HERE
}
};
}
};
}
map()
, определенный в Stream, объявляется как:
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
Stream.map()
ожидает Function
и, передав UnaryOperator
, вы предоставляете все, что требуется.
Я не смог найти ни одного примера без явного вызова метода apply ().Поэтому, пожалуйста, помогите мне понять, что здесь произошло.
Как правило, вы не реализуете непосредственно функциональный интерфейс, но передаете лямбду, поскольку это более просто:
new Stream().map(s->s.trim().toUpperCase())....