gpt4 book ai didi

Java 8 流 IllegalStateException

转载 作者:行者123 更新时间:2023-11-30 03:56:59 27 4
gpt4 key购买 nike

我尝试使用 Java8 流计算素数,但遇到 IllegalStateException:流已被操作或关闭。

这是我的代码:

package experimentations.chapter02;

import java.util.stream.Stream;

public class PrimesStream {
public static void main(String[] args) {
Stream.iterate(0, e-> e+1).filter(PrimesStream::isPrime).limit(10).forEach(System.out::println);
}

public static boolean isPrime(int i){
if (i < 2) return false;
Stream<Integer> stream = Stream.iterate(2, e -> e+1);
stream.limit(i - 2);
return !stream.anyMatch(divisor -> i%divisor == 0);
}

}

这是堆栈跟踪:

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
at java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:449)
at experimentations.chapter02.PrimesStream.isPrime(PrimesStream.java:14)
at experimentations.chapter02.PrimesStream$$Lambda$2/918221580.test(Unknown Source)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.Spliterators$IteratorSpliterator.tryAdvance(Spliterators.java:1812)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:529)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:516)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at experimentations.chapter02.PrimesStream.main(PrimesStream.java:7)

我感觉这是因为我试图将一个流调用应用到另一个流调用中,但即使有这个想法,我也不知道最简单的解决方法是什么。

最佳答案

您需要链接您的流方法,这将修复它,因此您的 isPrime 应该是这样的:

return !Stream.iterate(2, e -> e + 1)
.limit(i - 1)
.anyMatch(divisor -> i % divisor == 0);

关于Java 8 流 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22918207/

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