gpt4 book ai didi

java-8 - Stream接口(interface)中filter()方法的实现在哪里?

转载 作者:行者123 更新时间:2023-12-02 14:24:02 25 4
gpt4 key购买 nike

class App {
public static void main(String[] args) {
ArrayList<Integer> myList = new ArrayList<>();

myList.add(7);
myList.add(18);
myList.add(10);
myList.add(24);
myList.add(17);
myList.add(5);

Stream<Integer> stream = myList.stream();

stream = stream.filter(n -> n > 10); // it returns a stream of elements more than 10

stream.forEach(n -> System.out.print(n + " "));
}
}

此代码过滤调用流,然后打印所有大于 10 的元素。谓词中的测试方法为我们完成了这一任务。

但是返回大于 10 的“STREAM”的 filter() 方法的实际实现在哪里?我不明白。

这个问题在某种程度上也适用于 forEach() 方法。它如何遍历流?由于filter()和forEach()方法在接口(interface)流中是抽象的并且没有实现。

最佳答案

java.util.stream.ReferencePipline实现Stream<T>.filter() .

@Override
public final Stream<P_OUT> filter(Predicate<? super P_OUT> predicate) {
Objects.requireNonNull(predicate);
return new StatelessOp<P_OUT, P_OUT>(this, StreamShape.REFERENCE,
StreamOpFlag.NOT_SIZED) {
@Override
Sink<P_OUT> opWrapSink(int flags, Sink<P_OUT> sink) {
return new Sink.ChainedReference<P_OUT, P_OUT>(sink) {
@Override
public void begin(long size) {
downstream.begin(-1);
}

@Override
public void accept(P_OUT u) {
if (predicate.test(u))
downstream.accept(u);
}
};
}
};
}

关于java-8 - Stream<T>接口(interface)中filter()方法的实现在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568196/

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