gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:35:20 25 4
gpt4 key购买 nike

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

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?

最佳答案

基本上,函数式编程的概念之一是 pure functions确定性且无副作用,称为 immutability . Stream中的所有中间操作api 是不可变的并返回新的 Stream。

Oracle 中所述文档,所有中间操作,如 filter , map等返回新流。例如 map 的文档方法如下:

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

Returns a stream consisting of the results of applying the given function to the elements of this stream. This is an intermediate operation.

Type Parameters: R - The element type of the new stream Parameters:

mapper - a non-interfering, stateless function to apply to each element

Returns: the new stream



有关更多信息,您可以查看 Java 中的 Stream 实现(例如 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));
}
};
}
};
}

关于Java 8 Streams 中间操作会产生新的流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60677932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com