Stream的操作

中间操作

map()

返回一个流,当中包含了将给定函数应用到当前流中的每一个元素后返回的结果。

只有一种实现,在 ReferencePipeline 中定义

创建一个 StatelessOp(ReferencePipeline 的内部类),重写 opWrapSink(定义在 AbstractPipeline 中) 方法后返回

opWrapSink 方法创建 Sink.ChainedReference,重写 accept 方法,并返回

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));
                }
            };
        }
    };
}

猜你喜欢

转载自www.cnblogs.com/flying-snake/p/11537996.html