开发者社区> 问答> 正文

Java 8 Streams中间操作会产生新的流吗?

当我在流上调用中间操作时,它们是否为每个中间操作创建新的流?

List<Integer> list = List.of(1,2,3,4,5);

list.stream().filter(i -> i > 4).map(o -> o*2).collect(Collectors.toList());

它创建了多少个流?1或3?

问题来源:Stack Overflow

展开
收起
montos 2020-03-26 15:30:25 1120 0
2 条回答
写回答
取消 提交回答
  • java 8 有stream,是方便操作集合的。

    毋庸置疑肯定产生了新的流

    2020-03-30 21:23:10
    赞同 展开评论 打赏
  • 基本上,函数式编程的概念之一是pure functions确定性的,并且没有所谓的副作用immutability。Streamapi中的所有中间操作都是不可变的,并返回新的Stream。

    作为中提到Oracle的文件,所有的中间业务的一样filter,map和等返回新流。例如map方法文件如下:

    Stream<R> map(Function<? super T,? extends R> mapper)
    

    返回一个流,该流包含将给定函数应用于此流的元素的结果。这是一个中间操作。 类型参数:R-新流的元素类型参数: 映射器-应用于每个元素的无干扰,无状态函数 返回: 新流

    有关更多信息,您可以看一下Java中的Stream实现(例如map,返回new的方法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));
                    }
                };
            }
        };
    }
    

    回答来源:Stack Overflow

    2020-03-26 15:31:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载